2011-11-02 30 views
9

Tôi muốn nhận các nút "Gói" có nút "Hệ thống" với thuộc tính "mtm" và giá trị của thuộc tính "mtm" là "2055 ". Đối với tài liệu ví dụ dưới đây, chỉ cần trả lại nút Gói đầu tiên.XPath: Chọn các nút cha có nút con với thuộc tính

tôi sử dụng

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

nhưng nó không hoạt động. Có gì sai với biểu thức này?

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

Trả lời

13

Tháo / trước SystemCompatibility

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

Nó hoạt động, cảm ơn. Của tôi xấu, tôi nghĩ rằng tôi đã thử cách tiếp cận này, nhưng thực sự tôi đã không. – kennyzx

2

Thử sử dụng:

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

Sử dụng hậu duệ :: operator sẽ cho phép bạn để có được bất kỳ cháu Hệ thống Package. http://www.w3schools.com/xpath/xpath_axes.asp

+0

này sẽ trở lại chỉ nút hệ thống và không phải là toàn bộ nút Package –

+0

Ah, cậu nói đúng. Tôi hiểu lầm câu hỏi. Cảm ơn bạn đã chỉ ra điều đó. –

+2

Điều này sẽ làm việc với một số sửa đổi! Lưu ý các dấu ngoặc đóng gói '/ Cơ sở dữ liệu/Gói [hậu duệ :: Hệ thống [@ mtm = '2055']]' –

Các vấn đề liên quan