2012-04-20 17 views
93

Tôi có thể sử dụng XPath nào để chọn bất kỳ danh mục nào có thuộc tính tên được chỉ định và bất kỳ tác giả nút con nào có giá trị được chỉ định.XPath với nhiều điều kiện

tôi đã cố gắng biến thể khác nhau của con đường bên dưới không thành công:

//quotes/category[@name='Sport' and author="James Small"] 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<quotes> 
    <category name="Sport"> 
    <author>James Small<quote date="09/02/1985">Quote One</quote><quote    date="11/02/1925">Quote nine</quote></author> 
    </category> 
    <category name="Music"> 
    <author>Stephen Swann 
<quote date="04/08/1972">Quote eleven</quote></author> 
    </category> 
    </quotes> 

Trả lời

154

Hãy thử:
//category[@name='Sport' and ./author/text()='James Small']

+0

Đối với người theo dõi, thông báo lỗi "Đã mong đợi], nhưng đã tìm thấy: &&" có nghĩa là "sử dụng từ khóa và thay vì &&" (vì câu trả lời này chỉ định) – rogerdpack

11

câu hỏi không rõ ràng, nhưng những gì tôi hiểu bạn cần phải chọn một catagory có thuộc tính name và nên có tác giả con với giá trị được chỉ định, đúng tôi nếu tôi đang worng

đây là xpath

//category[@name='Required value'][./author[contains(.,'Required value')]] 
e.g 
//category[@name='Sport'][./author[contains(.,'James Small')]] 
15

Sử dụng:

/category[@name='Sport' and author/text()[1]='James Small'] 

hoặc sử dụng:

/category[@name='Sport' and author[starts-with(.,'James Small')]] 

Đó là một quy tắc tốt để cố gắng tránh sử dụng toán tử giả // bất cứ khi nào có thể, vì ca đánh giá của nó n thường rất chậm.

Ngoài ra:

./somename 

tương đương với:

somename 

vì vậy nó được khuyến khích để sử dụng sau này.

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