java - xml的xpath获取节点信息

标签 java xml xpath

我正在编写一个java程序来搜索文本并返回其节点信息。

  1. 程序应搜索文档中任意位置的文本。
  2. 返回 5 个预定义节点和节点值。

示例 xml 文件:-

<project xmlns="https://example.hoom/go/bing">
    <name>purchaseOrder </name>
    <property name="included" type="hidden">true</property>
    <locales>
        <locale>en</locale>
        <locale>hi</locale>
    </locales>
    <defaultLocale>en</defaultLocale>
    <gamespace>
        <name locale="en">hambook</name>
        <name locale="de">hambook</name>
        <lastChanged>2014-03-05T18:47:30</lastChanged>
        <lastChangedBy>userx</lastChangedBy>
        <property name="included" type="hidden">true</property>
        <gamespace>
            <name locale="en">DbBook</name>
            <name locale="zw">DbBook</name>
            <hecrotSubject status="valid">
                <name locale="en">hexValue</name>
                <name locale="zw">hexValue</name>
                <hecrotItem>
                    <name locale="en">hireValue</name>
                    <name locale="zw">hireValue</name>
                    <hello>searchTerm</hello>
                </hecrotItem>
            </hecrotSubject>
        </gamespace>
    </gamespace>
    <gamespace>
        <name locale="en">Names</name>
        <lastChanged>2016-01-12T12:42:46</lastChanged>
        <gamespace>
            <name locale="en">Database Layer</name>
            <name locale="zw">Database Layer</name>
            <hecrotSubject status="valid">
                <name locale="en">qsxyz</name>
                <hecrotItem>
                    <name locale="en">myName</name>
                    <hello>...Hi there..</hello>
                </hecrotItem>
            </hecrotSubject>
        </gamespace>
    </gamespace>
</project>

我当前的 xpath 是:-

"//*[local-name()='gamespace']/*[local-name()='hecrotSubject']/*[local-name()='hecrotItem'][contains(., '"& searchTerm &"')]/ancestor-or-self::*/*[local-name()='name' and @locale='en']"

这仅使用xpath.compile().evaluate()给出根标记。 虽然我需要的结果是

五个预定义节点的名称值(如果它们包含搜索文本(此示例 xml 中的 searchTerm))。

示例结果应该是:-

Project - purchaseOrder

gamespace - hambook

gamespace - DbBook

hecrotSubject - hexValue

hecrotItem - hireValue

编辑

我在 java 中使用以下语句:-

String expression = Xpath;
Strings vals = xPath.compile(expression).evaluate(xmlDocument);
System.out.println(vals);

最佳答案

我不知道为什么你只得到根标签
但在你的 xpath 中,某些值(节点名称)的情况是错误的。修复 hecrotSubject 和 hecrotItem 应该可以工作。
但顺便说一句,我不明白为什么您要使用 local-name 来设置正确的 namespace ,如下所示也应该这样做:

/b:gamespace/b:hecrotsubject/b:hecrotitem[contains(., 'searchTerm')]/ancestor-or-self::*/b:name[@locale='en']" 

更新母鹿以更新问题

主要问题是您需要迭代可能由 xpath evaluate 返回的 NodeList

看看例如:How to read XML using XPath in Java

关于java - xml的xpath获取节点信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36034524/

相关文章:

Java - 程序与服务器同步

mysql - 发送到 xml 时对文件进行排序

java - selenium webdriver xpath InvalidSelectorError

java - JAXB @XmlValue 和 @XmlElements

java - 摆脱 JAX-WS 中的空 xmlns 元素

xslt - 相同的 xpath 在命令行上有效,但在 xslt 中无效

html - 基于多个子级的 XPath 父级

java - 如何使用 sharedPreference 类存储密码?

java - 在特定位置插入元素没有发生

java - 输出最终对象的 JVM 选项