Для следующего образца входного файла с именем urls.xml
<root>
<url>
<loc>http</loc>
<lastmod>2015-02-26</lastmod>
<title>Hello</title>
<priority>1.0</priority>
</url>
<url>
<loc>http</loc>
<lastmod>2015-02-26</lastmod>
<title>Hello</title>
<priority>7.0</priority>
</url>
<url>
<loc>http</loc>
<lastmod>2015-02-26</lastmod>
<title>Hello</title>
<priority>10.0</priority>
</url>
</root>
Сначала создать полное Document
дерево, как обычно
Document document = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new File("urls.xml"));
Затем запустите XPath
запрос, который выбирает все Node
сек выше определенные priority
XPathExpression expr = XPathFactory.newInstance()
.newXPath().compile("//url[priority > 5]");
NodeList urls = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
Если вы хотите сериализовать результаты в другом XML-файле, сначала создайте новый Document
.
Document result = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().newDocument();
Node root = result.createElement("results");
result.appendChild(root);
Затем добавьте отфильтрованный URL-адрес Node
с, как
for (int i = 0; i < urls.getLength(); i++) {
Node copy = result.importNode(urls.item(i), true);
root.appendChild(result.createTextNode("\n\t"));
root.appendChild(copy);
}
root.appendChild(result.createTextNode("\n"));
Теперь все, что вам нужно сделать, это сериализации новый Document
к String
и пишут, что в файл. Вот я просто распечатаю его на консоли.
System.out.println(
((DOMImplementationLS) result.getImplementation())
.createLSSerializer().writeToString(result));
Выход:
<?xml version="1.0" encoding="UTF-16"?>
<results>
<url>
<loc>http</loc>
<lastmod>2015-02-26</lastmod>
<title>Hello</title>
<priority>7.0</priority>
</url>
<url>
<loc>http</loc>
<lastmod>2015-02-26</lastmod>
<title>Hello</title>
<priority>10.0</priority>
</url>
</results>
После того, как вы создали документ XML, вы можете сгореть XPath, чтобы получить только узлы, которые вы заинтересованы в Если вы размещаете свой формат XML. , возможно, мы сможем помочь вам в этом. –
@RaviThapliyal, но с xpath я должен разобрать и после использования xpath правильно? –
Да, для этого потребуется полное дерево DOM в памяти, в соответствии с которым затем будет вычисленное выражение xpath. –