2015-10-27 36 views
0

如何在數據中搜索Object.name的值:一個只知道數據中Object.name的值:三,使用XPath?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查詢搜索 「CCC」(第一查詢),然後按照ABC:從「三個資源「到」一個「。

這可能嗎?

簡體版:

<?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

我沒有得到你想要的,你可以通過添加你需要的輸出來添加更多細節。 –

+0

你好穆罕默德!我在原文下面添加了一個簡化版本。 – Kermit

+0

把你想要的輸出結果從xpath請 –

回答

1

我想這就是你想要什麼:此得到有關三的元素之一的元素。 這裏是如何得到它

首先要得到元素的參考

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

這將讓

#2 

我們將替換它

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

the輸出將是

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 

我希望這可以幫助。