1

我有 xml 有这样的数据

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

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

4

4 回答 4

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 相反,它会在允许您访问之前读取整个文档。

于 2013-08-26T14:32:42.167 回答
1

您不能使用 SAX 跳转到(跳过之前的所有元素)某个元素。它按顺序读取所有元素并将它们返回到您的ContentHandler. 在通过从 ContentHandler 中抛出异常找到相关元素之后,您所能做的就是跳过解析。

如果您正在寻找一种对 XML 元素的随机访问,那么您应该明确地考虑@Guillaume 指出的 DOM。

于 2013-08-26T16:45:14.670 回答
0

您可以“跳转”到特定的 XML 标记,但要按顺序读取这些标记。没有可靠的方法可以在不阅读的情况下跳过标签。

于 2013-08-26T14:30:52.267 回答
-1

最好使用 Java StAX API。Oracle Java 教程站点对如何使用它有很好的阅读。从 XML 进行基本的读取/解析非常干净和简单。

于 2013-08-26T14:32:30.930 回答