XPath ที่มีหลายเงื่อนไข


157

XPath ใดที่ฉันสามารถใช้เพื่อเลือกหมวดหมู่ใด ๆ ที่มีแอตทริบิวต์ name ที่ระบุและผู้สร้างโหนดย่อยที่มีค่าที่ระบุ

ฉันได้ลองเส้นทางที่แตกต่างกันโดยไม่ประสบความสำเร็จ:

//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>

คำตอบ:


248

ลอง:
//category[@name='Sport' and ./author/text()='James Small']


4
สำหรับผู้ติดตามข้อความแสดงข้อผิดพลาด "คาดว่าจะได้ แต่พบ: &&" หมายถึง "ใช้และคำหลักแทน &&" (ตามที่ระบุคำตอบนี้)
rogerdpack

31

การใช้ :

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

หรือใช้:

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

มันเป็นกฎที่ดีในการพยายามหลีกเลี่ยงการใช้ตัวดำเนินการ//หลอกทุกครั้งที่เป็นไปได้เพราะโดยทั่วไปแล้วการประเมินจะช้ามาก

นอกจากนี้:

./somename

เทียบเท่ากับ:

somename

ดังนั้นจึงแนะนำให้ใช้หลัง


14

คำถามไม่ชัดเจน แต่สิ่งที่ฉันเข้าใจว่าคุณต้องเลือกหมวดหมู่ที่มีแอตทริบิวต์ชื่อและควรมีผู้แต่งลูกที่มีค่าที่ระบุแก้ไขให้ฉันถ้าฉันใส่

นี่คือ xpath

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

1

คุณสามารถใช้หลายเงื่อนไขใน xpath โดยใช้และ, หรือ

//input[@class='_2zrpKA _1dBPDZ' and @type='text']

//input[@class='_2zrpKA _1dBPDZ' or @type='text']

-1

ที่นี่เราสามารถทำเช่นนี้ได้เช่นกัน:

//category [@name='category name']/author[contains(text(),'authorname')]

หรือ

//category [@name='category name']//author[contains(text(),'authorname')]

หากต้องการเรียนรู้ XPATH ในรายละเอียดโปรดไปที่เซเลเนียม xpath โดยละเอียด

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