ฉันจะเลือกองค์ประกอบลูกที่มีความลึกโดยใช้ XPath ได้อย่างไร


105

สมมติว่าฉันมีสิ่งนี้ (ตัวย่อ):

<form id="myform">
    <!-- some input fields -->
    <input type="submit" value="proceed"/>
</form>

จากนั้นฉันก็สามารถเลือกที่ปุ่มส่งโดย //form[@id='myform']/input[@type='submit']XPath เยี่ยมมาก

อย่างไรก็ตามเทมเพลตของฉันอาจมีการเปลี่ยนแปลงและฉันต้องการมีความยืดหยุ่นในส่วนลึกของปุ่มส่ง มันอาจจะวางในตารางดังนี้:

<form id="myform">
    <!-- some input fields -->
    <table><tr><td>
           <input type="submit" value="proceed"/>
    </td></tr></table>
</form>

ฉันรู้ว่าฉันสามารถเลือกองค์ประกอบที่เป็นหลานได้ แต่ฉันไม่สามารถเลือก grand-grand-grand -...- ความลึกใด ๆ เช่น:

  • //form[@id='myform']/*/input[@type='submit'] เลือกเฉพาะลูกหลานเท่านั้นไม่มีความลึกเพิ่มเติม
  • //form[@id='myform']/*/*/input[@type='submit'] เลือกเฉพาะ grand-grand-children ไม่มีความลึกเพิ่มเติมหรือน้อยลง
  • //form[@id='myform']/**/input[@type='submit'] ไม่ถูกต้อง

ดังนั้นฉันจะเลือกปุ่มส่งนี้อย่างน่าเชื่อถือโดยไม่ใช้รหัสองค์ประกอบได้อย่างไร

คำตอบ:


165

เกือบเสร็จแล้ว เพียงใช้:

//form[@id='myform']//input[@type='submit']

//ลัดนอกจากนี้ยังสามารถใช้ในการแสดงออก


ดูเหมือนว่า C # จะไม่เข้าใจสัญกรณ์นี้ //form//inputส่งคืนค่า null ใน C # ในขณะที่ Chrome สามารถค้นหา 35 อินพุตโดยใช้ xpath เดียวกัน
Achilles

1
ความคิดเห็นล่าสุดของฉันถูกพูดถึงที่นี่: stackoverflow.com/questions/23232671/…
Achilles

14

หากคุณกำลังใช้ XmlDocument และ XmlNode

พูด:

XmlNode f = root.SelectSingleNode("//form[@id='myform']");

ใช้:

XmlNode s = f.SelectSingleNode(".//input[@type='submit']");

ขึ้นอยู่กับเครื่องมือที่คุณใช้ แต่. // จะเลือกชายด์ใด ๆ ความลึกใด ๆ จากโหนดอ้างอิง


ทำงานได้ดีภายใน Powershell โดยใช้คำสั่ง SelectSingleNode บนโหนด XML ที่แยกออกมาก่อนหน้านี้
Gizmo3399


-3

นอกจากนี้คุณสามารถทำได้ด้วยตัวเลือก css:

form#myform input[type='submit']

องค์ประกอบ beween ช่องว่างใน css elector หมายถึงการค้นหาอินพุต [type = 'submit'] องค์ประกอบที่ระดับความลึกของรูปแบบหลัก

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