2010-09-21 29 views
5

Tôi muốn tìm giá trị của một phần tử được đối sánh trên thuộc tính id mà tôi chỉ có ref - bit có #, neo.Xpath: tìm giá trị phần tử từ kết hợp thuộc tính id thành id neo

Tôi đang tìm kiếm giá trị của partyId:

< party id="partyA" > 
    <partyId>THEID</partyId> 

nhưng để đạt được điều đó tôi chỉ có href từ sau

<MyData> 
    < MyReference href="#partyA" /> 

Strip dấu # không nhìn tốt với tôi.

Bất kỳ gợi ý nào?

+1

Câu hỏi hay (+1). Xem câu trả lời của tôi cho hai giải pháp có thể :) –

Trả lời

4

Vì bạn chưa cung cấp tài liệu XML hoàn chỉnh, tôi phải sử dụng // - một thực tế mà tôi khuyên bạn nên tránh.

Giả sử rằng

$vDataRef

được định nghĩa là

//MyData/MyReference/@href

và chuỗi giá trị của nó là "#partyA", sau đó một biểu thức XPath có thể là lựa chọn nút truy nã là:

//party[@id=substring($vDataRef,2)] 

Trong trường hợp các tài liệu XML có một DTD trong đó id thuộc tính của party được định nghĩa là kiểu ID, sau đó nó là thuận tiện hơn và hiệu quả để sử dụng chức năng XPath chuẩn id():

id(substring($vDataRef,2)) 
0

Giả sử bạn có ID của bạn như là một biến đã (cho phép nói $ myid), sau đó hãy thử sử dụng:

//party[contains($myId, @id)] 

Các contains() function sẽ xem xét để xem trên mỗi nút phù hợp hay không attibut partyId là trong teh giá trị mà bạn vượt qua trong

Ngoài ra (như có thể được coi là 'ropey'), bạn có thể thử:.

//party[@id=substring($myId, 2, 1 div 0)] 

số substring() function phải chính xác hơn một chút.

+0

It's OK để sử dụng p/2 'fn: substring()', bạn không cần biểu thức 'INF' đó. –

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