XPath: Làm thế nào để chọn các nút không có thuộc tính?


94

Sử dụng XPath, làm thế nào để chọn các nút không có thuộc tính (trong đó thuộc tính count = 0)?

Ví dụ:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>

Câu trả lời:


153
//node[not(@*)]

Đó là XPath để chọn tất cả các nút có tên là "nút" trong tài liệu mà không có bất kỳ thuộc tính nào.


1
Điều này thật tuyệt, nhưng nó vẫn tìm thấy <node class=""></node>bất cứ điều gì chúng ta có thể làm với nó?
Marek

1
@MarekCzaplicki xem câu trả lời bên dưới để giải quyết trường hợp này. stackoverflow.com/questions/1323755/…
phil

23
//node[count(@*)=0]

Sẽ chọn tất cả <node> không có thuộc tính nào


9

Để giải quyết bình luận của Marek Czaplicki và mở rộng câu trả lời

//node[not(@*) or not(string-length(@*))]

.... sẽ chọn tất cả các phần tử nút không có thuộc tính HOẶC có các thuộc tính đều trống. Nếu đó chỉ là một thuộc tính cụ thể mà bạn quan tâm, thay vì tất cả chúng, thì bạn có thể sử dụng

//node[not(@attribute1) or not(string-length(@attribute1))]

... và điều này sẽ chọn tất cả các phần tử nút không có thuộc tính gọi là attribute1OR có thuộc tínhattribute1 thuộc tính trống.

Nghĩa là, các phần tử sau sẽ được chọn bởi một trong các biểu thức xpath này

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>

Xem ví dụ jsfiddle tại đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.