繁体   English   中英

xml的xpath获取节点信息

[英]xpath for xml to get node information

我正在编写一个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),则其name值。

样本结果应为:-

项目 - purchaseOrder

游戏空间-hambook

游戏空间-DbBook

hecrotSubject-hexValue

hecrotItem-hireValue

编辑

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

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

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

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

将doe更新为更新的问题

主要的问题是,你需要遍历NodeList可能与XPath返回evaluate

看看例如: 如何使用Java中的XPath读取XML

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM