我用java解析XML文档:
doc = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new URL(url).openStream());
工作,但是可以用一些过滤器进行解析吗?例如,我的 XML 文件有一个属性优先级,可以使用过滤器进行解析,例如优先级>8?
因此,在文档中只有优先级 > 8 的元素。
XML 示例:
<url>
<loc>http</loc>
<lastmod>2015-02-26</lastmod>
<title>Hello</titolo>
<priority>1.0</priority>
</url>
...
谢谢
最佳答案
对于以下名为 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 = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new File("urls.xml"));
然后运行 XPath
查询,选择高于特定优先级
的所有Node
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>
关于java - 使用过滤器解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746413/