2010-10-06 67 views
10

tôi muốn trích xuất giá trị tên thuộc tính từ thẻ sautruy vấn XPath như thế nào để có được giá trị của một thuộc tính dựa trên hai thuộc tính

<application 
    comments="Do not erase this one" 
    executable="run_CIET" 
    icon="default" 
    instances="1" 
    mode="1" 
    name="CIET" 
    order="10" 
    selection="1" 
    tool="y" 
/> 

tôi có thể dễ dàng nhận được giá trị của giá trị tên thuộc tính dựa trên giá trị chế độ như hình dưới đây

xpath Applications.xml '//applications/application[@mode='3']'/@name 

Nhưng nếu tôi muốn bổ sung thêm condtion đó là "lấy giá trị thuộc tính tên khi mode = X và thuộc tính cụ là không có trong thẻ ứng dụng"

làm thế nào để chúng ta làm ngày Là? Tôi đã thử một số nội dung như

xpath Applications.xml '//applications/application[@mode='3' and [email protected]]'/@name 

nhưng không hoạt động.

Tôi chưa sử dụng XPath trước đây và tôi thấy khó khăn khi tôi tìm kiếm trợ giúp W3C trên XPath nhưng không tìm thấy những gì tôi muốn. Hãy giúp tôi.

+0

Câu hỏi hay, +1. Xem câu trả lời của tôi cho một lời giải thích về vấn đề của bạn, một giải pháp ngắn và đầy đủ và một số khuyến nghị. :) –

Trả lời

16
How do we do this? I tried something like 

    xpath Applications.xml '//applications/application[@mode='3' and [email protected]]'/@name 

but its not working. 



[email protected] 

là cú pháp không hợp lệ trong XPath. Có một toán tử !=, nhưng không có toán tử !.

Sử dụng:

//applications/application[@mode='3' and not(@tool)]/@name 

Có hai điều bạn nên luôn luôn cố gắng tránh:

  1. sử dụng toán tử != - nó có nét kỳ lạ và không cư xử như not() chức năng - không sử dụng nó nếu một trong các toán hạng là một tập hợp nút.

  2. Cố gắng tránh càng nhiều càng tốt bằng cách sử dụng từ viết tắt // - điều này có thể gây ra sự kém hiệu quả đáng kể và cũng có hành vi bất thường không phù hợp với hầu hết mọi người.

5

Sử dụng not(@tool) thay vì [email protected] sẽ thực hiện công việc. Nếu động cơ XPath của bạn không hoạt động, bạn có thể tưởng tượng được là count(@tool)=0, nhưng điều đó không cần thiết.

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