我有 xml 有这样的数据
<A Name="">
</A>
<A Name="">
</A>
.....
我如何跳转到某个特定节点并使用 SAX 解析器读取它 - 比如第三个标签 - A
我有 xml 有这样的数据
<A Name="">
</A>
<A Name="">
</A>
.....
我如何跳转到某个特定节点并使用 SAX 解析器读取它 - 比如第三个标签 - A
如果要跳转到子节点,则必须使用 DOM API 而不是 SAX。
// load the document
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File(filename));
// prepare result list
ArrayList<Element> res = new ArrayList<Element>();
// prepare to use xpath
XPath xpath = XPathFactory.newInstance().newXPath();
// read 3rd A element
NodeList list = (NodeList) xpath.compile("/A[3]")
.evaluate(doc, XPathConstants.NODESET);
// copy the DOM element in the result list
for (int i = 0; i < list.getLength(); i++) {
res.add((Element) list.item(i));
}
请注意,与 SAX 相反,它会在允许您访问之前读取整个文档。
您不能使用 SAX 跳转到(跳过之前的所有元素)某个元素。它按顺序读取所有元素并将它们返回到您的ContentHandler
. 在通过从 ContentHandler 中抛出异常找到相关元素之后,您所能做的就是跳过解析。
如果您正在寻找一种对 XML 元素的随机访问,那么您应该明确地考虑@Guillaume 指出的 DOM。
您可以“跳转”到特定的 XML 标记,但要按顺序读取这些标记。没有可靠的方法可以在不阅读的情况下跳过标签。
最好使用 Java StAX API。Oracle Java 教程站点对如何使用它有很好的阅读。从 XML 进行基本的读取/解析非常干净和简单。