2011-11-02 185 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']]' –

相关问题