在JAVA中如何跳转到XML中的特定节点?

时间:2013-08-26 14:27:58

标签: java xml-parsing sax

我有xml这样的数据

<A Name="">
</A>
<A Name="">
</A>
.....

如何通过使用SAX解析器跳转到某个特定节点并读取它 - 如第3个标签-A

4 个答案:

答案 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进行基本的读/解析非常简洁。