如何在数据中搜索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
答案 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
我希望这可以提供帮助。