XPath按引用搜索

时间:2015-10-27 09:19:08

标签: xpath

如何在数据中搜索Object.name的值:只知道数据中Object.name的值:三,使用XPath?

<data:Three abc:ID="3">
<data:Object.name>CCC</data:Object.name>
<data:Object.Container abc:resource="#2"/>
</data:Three>

<data:Two abc:ID="2">
<data:Object.name>BBB</data:Object.name>
<data:Two.Parent abc:resource="#1"/>
</data:Two>

<data:One abc:ID="1">
<data:Object.name>This is the value</data:Object.name>
</data:One>

我使用以下方式手动搜索:

/abc:ABC/data:Three[data:Object.name/contains(.,'CCC')]
/abc:ABC/data:Two[@abc:ID='2']
/abc:ABC/data:One[@abc:ID='1']
/abc:ABC/data:One[@abc:ID='1']/data:Object.name

但是,我希望一个 XPath查询来搜索&#34; CCC&#34; (第一个查询)然后按照abc:资源来自&#34; Three&#34;到&#34;一个&#34;。

这可能吗?

简化版:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Three ID="3">
        <Object.name>CCC</Object.name>
        <Object.Container resource="#2"/>
    </Three>
    <Two ID="2">
        <Object.name>BBB</Object.name>
        <Two.Parent resource="#1"/>
    </Two>
    <One ID="1">
        <Object.name>This is the value</Object.name>
    </One>
</root>

/root/Three/Object.name[contains(.,'CCC')]
/root/Two[@ID='2']
/root/One[@ID='1']
/root/One[@ID='1']/Object.name

1 个答案:

答案 0 :(得分:1)

我想这就是你想要的:这就得到了与Three's元素相关的One元素。 以下是如何获得它

首先,您希望获得元素

的引用
//Three[Object.name[contains(.,'CCC')]]/Object.Container/@resource

这将得到

#2

我们将通过替换它消除#

translate(//Three[Object.name[contains(.,'CCC')]]/Object.Container/@resource ,'#', '')

输出将是

2

我们将对两个元素和一个元素执行相同的操作。

最终的XPath将是

.//One[@ID=translate(//Two[@ID=translate(//Three[Object.name[contains(.,'CCC')]]/Object.Container/@resource ,'#', '')]/Two.Parent/@resource ,'#', '')]/Object.name/text()

结果

This is the value

我希望这可以提供帮助。