java - 在 Java 中使用 XPath 提取 XML 中的节点值

标签 java xml xpath xml-parsing

我有一个 XML 文档:

<response>
    <result>
        <phone>1233</phone>
        <sys_id>asweyu4</sys_id>
        <link>rft45fgd</link>       
            <!-- Many more in result -->
    </result>

    <!-- Many more result nodes -->

</response>

XML 结构未知。我正在从用户处获取属性的 XPath。

例如输入是如下字符串: //response/result/sys_id , //response/result/phone

如何通过评估 XPath 来获取整个 XML 文档的这些节点值?

我提到了this但我的 xpath 如上所示,即它没有 *text() 格式。

xpath evaluator与我的输入格式完美配合,那么有什么方法可以在 java 中实现相同的效果吗?

谢谢!

最佳答案

如果没有看到你的代码,这会很困难...我只是将其作为 NodeList 进行评估,然后在结果列表中的每个节点上调用 getTextContent()...

String input = "<response><result><phone>1233</phone><sys_id>asweyu4</sys_id><link>rft45fgd</link></result><result><phone>1233</phone><sys_id>another-sysid</sys_id><link>another-link</link></result></response>";
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
        .parse(new ByteArrayInputStream(input.getBytes("UTF-8")));
XPath path = XPathFactory.newInstance().newXPath();
NodeList node = (NodeList) path.compile("//response/result/sys_id").evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < node.getLength(); i++) {
    System.out.println(node.item(i).getTextContent());
}

输出

asweyu4
another-sysid

关于java - 在 Java 中使用 XPath 提取 XML 中的节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964121/

相关文章:

java - Spring 无法 Autowiring Map bean

java - 将处理结果存储在表中

java - 将数据库 ID 添加到 Eclipse 组合

xml - 连接到域注册 EPP 服务器

java - 如何将Xpath的结果变成我的输出结果?

java - 在使用 Selenium 进行测试自动化期间检查元素时,某些网页中的元素 "id"会发生变化(不是静态的)。如何处理这种情况?

java - 如何在不干扰程序 UI 的情况下播放声音?

java - 在 Saxon Java 外部函数中深度复制 XML 节点

asp.net - 使用 ASP.NET 如何从网站读取外部 XML?

java - 使用 XPath 单击超文本链接