如何使用Java中的XPath阅读XML

问题:

我想使用Java中的XPath读取XML数据,所以在收集的信息中,我无​​法根据我的要求解析XML。
这是我要做的:
 通过其URL从线上获取XML文件,然后使用XPath来解析它,我想在其中创建两个方法。一个是我输入一个特定的节点属性id,我得到所有的子节点作为结果,其次是假设我只想获得一个特定的子节点值

<?xml version="1.0"?>
<howto>
  <topic name="Java">
      <url>http://www.rgagnonjavahowto.htm</url>
  <car>taxi</car>
  </topic>
  <topic name="PowerBuilder">
       <url>http://www.rgagnon/pbhowto.htm</url>
       <url>http://www.rgagnon/pbhowtonew.htm</url>
  </topic>
  <topic name="Javascript">
        <url>http://www.rgagnon/jshowto.htm</url>
  </topic>
 <topic name="VBScript">
       <url>http://www.rgagnon/vbshowto.htm</url>
 </topic>
 </howto>

在上面的例子中,我想读取所有元素,如果我通过@name搜索,还有一个函数,其中我只想从@name’Javascript’的URL只返回一个节点元素。
我希望我清除了我的问题:)
谢谢。

回答:

你需要一些这样的东西:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(<uri_as_string>);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(<xpath_expression>);

然后,您调用expr.evaluate()传递该代码中定义的文档和您期望的返回类型,并将结果转换为结果的对象类型。
如果您需要特定的XPath表达式的帮助,您应该可以将其作为单独的问题(除非是第一个问题,否则我理解您的问题是如何在Java中使用API​​)。
编辑:(响应评论):这个XPath表达式将获得PowerBuilder下的第一个URL元素的文本:

/howto/topic[@name='PowerBuilder']/url/text()

这将让你得到第二个:

/howto/topic[@name='PowerBuilder']/url[2]/text()

你得到这个代码:

expr.evaluate(doc, XPathConstants.STRING);

如果您不知道给定节点中有多少个URL,那么您应该这样做:

XPathExpression expr = xpath.compile("/howto/topic[@name='PowerBuilder']/url");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

然后循环在NodeList上。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to read XML using XPath in Java

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 27 = 29