我有xml这样的数据
<A Name="">
</A>
<A Name="">
</A>
.....
如何通过使用SAX解析器跳转到某个特定节点并读取它 - 如第3个标签-A
答案 0 :(得分:2)
如果要跳转到子节点,则必须使用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相反,它会在允许您访问之前阅读整个文档。
答案 1 :(得分:1)
您无法使用SAX跳转到(之前跳过所有元素)某个元素。它按顺序读取所有元素并将它们返回到ContentHandler
。在通过从ContentHandler中抛出异常找到相关元素之后,您可以做的就是跳过解析。
如果您正在寻找对XML元素的随机访问,那么您应该明确地考虑@Guillaume所指出的DOM。
答案 2 :(得分:0)
您可以“跳转”到特定的XML标记,但可以按顺序读取标记。如果没有阅读,就没有可靠的方法来跳过标签。
答案 3 :(得分:-1)
最好使用Java StAX API。 Oracle Java Tutorial Site非常了解如何使用它。从XML进行基本的读/解析非常简洁。