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

在JAVA中,如何跳转到XML中的特定节点?,java,xml-parsing,sax,Java,Xml Parsing,Sax,我有xml,它包含类似这样的数据 <A Name=""> </A> <A Name=""> </A> ..... ..... 如何使用SAX解析器跳转到某个特定节点并读取它(如第3个标记-A)您可以“跳转”到特定的XML标记,但要按顺序读取标记。没有可靠的方法可以在不阅读的情况下跳过标记。最好使用Java StAX API。这本书对如何使用它有很好的理解。对于从XML进行基本的读取/解析,它非常简洁 如果要跳转到子节点,必须使用domapi而

我有xml,它包含类似这样的数据

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

.....

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

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

最好使用Java StAX API。这本书对如何使用它有很好的理解。对于从XML进行基本的读取/解析,它非常简洁

如果要跳转到子节点,必须使用domapi而不是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));
  }
//加载文档
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(新文件(文件名));
//准备结果表
ArrayList res=新的ArrayList();
//准备使用xpath
XPath=XPathFactory.newInstance().newXPath();
//读取第三个元素
NodeList list=(NodeList)xpath.compile(“/A[3]”)
.evaluate(doc,XPathConstants.NODESET);
//复制结果列表中的DOM元素
对于(int i=0;i
请注意,与SAX相反,它将在允许您访问之前阅读整个文档。

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


如果你正在寻找一种随机访问XML元素的方法,那么你应该明确地考虑纪尧姆所指出的DOM。如果有人投了反对票,请留下你为什么这样做的评论。否则答案就不会更好。