如何在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。

以上是 如何在Java中使用XPath读取XML 的全部内容, 来源链接: utcz.com/qa/427936.html

回到顶部