XPath: จะเลือกโหนดที่ไม่มีแอตทริบิวต์ได้อย่างไร?


96

ใช้ XPath วิธีเลือกโหนดที่ไม่มีแอตทริบิวต์ (โดยที่แอตทริบิวต์ count = 0)

ตัวอย่างเช่น:

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

คำตอบ:


155
//node[not(@*)]

นั่นคือ XPath เพื่อเลือกโหนดทั้งหมดที่มีชื่อว่า "node" ในเอกสารโดยไม่มีแอตทริบิวต์ใด ๆ


1
นี่เป็นสิ่งที่ดี แต่ยังพบว่ามี<node class=""></node>อะไรให้เราทำได้บ้าง?
Marek

1
@MarekCzaplicki ดูคำตอบด้านล่างเพื่อแก้ไขกรณีนี้ stackoverflow.com/questions/1323755/…
phil


9

เพื่อตอบความคิดเห็นของ Marek Czaplicki และขยายคำตอบ

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

.... จะเลือกองค์ประกอบโหนดทั้งหมดที่มีแอตทริบิวต์เป็นศูนย์หรือซึ่งมีแอตทริบิวต์ที่ว่างเปล่าทั้งหมด หากเป็นเพียงคุณลักษณะเฉพาะที่คุณสนใจไม่ใช่ทั้งหมดคุณสามารถใช้ได้

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

... และสิ่งนี้จะเลือกองค์ประกอบโหนดทั้งหมดที่ไม่มีแอตทริบิวต์ที่เรียกว่าattribute1OR ซึ่งมีattribute1แอตทริบิวต์ที่ว่างเปล่า

นั่นคือองค์ประกอบต่อไปนี้จะถูกเลือกโดยนิพจน์ xpath เหล่านี้

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

ดูตัวอย่าง jsfiddle ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.