2012-05-30 23 views
18

Câu hỏi khá ngớ ngẩn, nhưng tôi hoàn toàn bị mắc kẹt. Tôi muốn trích xuất các nút con của một nút dựa trên một điều kiện. XML là như sau:Xpath: chọn nút dựa trên điều kiện (với tên địa phương())

<a> 
<aCode>aaa</aCode> 
<aValue>bbb</aValue> 
</a> 

Khái niệm là rõ ràng: //a[aCode='aaa']

Nhưng tôi không thể có được như thế nào tôi nên thay đổi nó nếu nó là với không gian tên và tôi đã có để sử dụng local-name(). Tôi đã thử nghiệm những điều sau tại http://www.xmlme.com/XpathTool.aspx và nó cung cấp cho một lỗi phân tích cú pháp:

/*[local-name()='a'][[local-name()='aCode']='aaa'] 

Có ai biết tôi nên làm gì không?

+0

địa phương-name() là rất khó chịu! XPath mất tất cả sự thanh lịch của nó khi bạn bắt đầu sử dụng không gian tên ... nhưng đây là một câu hỏi hữu ích – ropata

Trả lời

9

Hãy thử điều này

/a/aCode[text()='aaa'] 

hoặc

//*[local-name() = 'aCode' and text() = 'aaa'] 

Bạn đã sử dụng // tại địa điểm sai.

+0

Cảm ơn! Tôi chỉ muốn có cả hai con. – gisly

34

Bạn có thể có nghĩa là

//*[local-name()='a'][*[local-name()='aCode']='aaa'] 
+0

Vâng, nó hoạt động, cảm ơn bạn rất nhiều! – gisly

+0

Đây là những gì '*' có nghĩa là - '[* [tên địa phương() = 'aCode'] = 'aaa']'? Giúp tôi hiểu! –

+1

'*' là viết tắt của "bất kỳ phần tử nào". – choroba

0

này một tác phẩm:

//*[local-name()='a'][*[local-name()='acode' and text()='a2']] 

và cũng là một điều này:

//*[local-name()='a'][aCode[text()='a2']] 
Các vấn đề liên quan