2011-11-02 246 views
9

我想獲得具有「mtm」屬性的「系統」孫子的「Package」節點,並且「mtm」屬性的值爲「2055 」。對於下面的示例文檔,只應返回第一個Package節點。XPath:選擇具有屬性的子節點的父節點

我用

"/Database/Package[/SystemCompatibility/System[@mtm='2055']]" 

,但它不工作。這個表達有什麼問題?

<?xml version="1.0" encoding="UTF-8"?> 
<Database version="300"> 
<Package id="6imb05ww" description="ThinkPad Modem Adapter"> 
    <SystemCompatibility> 
     <System mtm="8742" os="Windows XP" oslang="en" /> 
     <System mtm="2055" os="Windows XP" oslang="jp" /> 
    </SystemCompatibility> 
</Package> 
<Package id="6imb06ww" description="ThinkPad Modem Adapter"> 
    <SystemCompatibility> 
     <System mtm="3046" os="Windows XP" oslang="en" /> 
    </SystemCompatibility> 
</Package> 
</Database> 

回答

13

取出/以前SystemCompatibility

/Database/Package[SystemCompatibility/System[@mtm='2055']] 
+0

它的工作原理,謝謝。我的壞,我認爲我已經嘗試了這種方法,但實際上我沒有。 – kennyzx

2

嘗試使用:

/Database/Package/descendant::System[@mtm='2055'] 

使用後代::運營商將讓你得到任何包裝系統的孫子。 http://www.w3schools.com/xpath/xpath_axes.asp

+0

這將返回只有系統的節點,而不是整個包節點 –

+0

啊,你說得對。我誤解了這個問題。感謝您指出了這一點。 –

+2

這將與一些修改!注意封裝支架 '/ Database/Package [descendant :: System [@ mtm ='2055']]' –

相關問題