เอกสาร XML:
<Home>
<Addr>
<Street>ABC</Street>
<Number>5</Number>
<Comment>BLAH BLAH BLAH <br/><br/>ABC</Comment>
</Addr>
</Home>
การแสดงออก XPath:
//*[contains(text(), 'ABC')]
//*
ตรงกับองค์ประกอบที่สืบทอดใด ๆของโหนดรูตต นั่นคือองค์ประกอบใด ๆ ยกเว้นโหนดรูท
[...]
เป็นคำกริยาก็กรองโหนดชุด ส่งคืนโหนดซึ่ง...
คือtrue
:
เพรดิเคตกรองชุดโหนด [... ] เพื่อสร้างชุดโหนดใหม่ สำหรับแต่ละโหนดในชุดโหนดที่จะถูกกรอง PredicateExpr จะถูกประเมิน [... ]; ถ้า PredicateExpr หาค่าเป็นจริงสำหรับโหนดนั้นโหนดจะรวมอยู่ในโหนดชุดใหม่ มิฉะนั้นจะไม่รวม
contains('haystack', 'needle')
ผลตอบแทนtrue
ถ้าhaystack
มี needle
:
ฟังก์ชั่น: บูลีนมี (สตริงสตริง)
ฟังก์ชั่นการบรรจุส่งกลับจริงถ้าสตริงอาร์กิวเมนต์แรกมีสตริงอาร์กิวเมนต์ที่สองและมิฉะนั้นกลับเท็จ
แต่contains()
รับสตริงเป็นพารามิเตอร์ตัวแรก และมันก็ผ่านโหนด ในการจัดการกับทุก ๆ โหนดหรือชุดโหนดที่ส่งผ่านเป็นพารามิเตอร์แรกจะถูกแปลงเป็นสตริงโดยstring()
ฟังก์ชัน:
อาร์กิวเมนต์ถูกแปลงเป็นประเภทสตริงราวกับว่าโดยการเรียกฟังก์ชันสตริง
string()
กลับมาทำงานstring-value
ของโหนดแรก :
ชุดโหนดถูกแปลงเป็นสตริงโดยส่งคืนค่าสตริงของโหนดในชุดโหนดที่เป็นลำดับแรกในเอกสาร หากชุดโหนดว่างเปล่าสตริงว่างจะถูกส่งกลับ
string-value
ของโหนดองค์ประกอบ :
สตริง - ค่าของโหนดองค์ประกอบคือการต่อกันของสตริง - ค่าของการสืบทอดโหนดข้อความทั้งหมดของโหนดองค์ประกอบในลำดับเอกสาร
string-value
ของโหนดข้อความ :
สตริง - ค่าของโหนดข้อความคือข้อมูลตัวละคร
ดังนั้นโดยทั่วไปstring-value
คือข้อความทั้งหมดที่มีอยู่ในโหนด (การต่อเชื่อมโหนดข้อความที่สืบทอดทั้งหมด)
text()
เป็นการทดสอบโหนดที่ตรงกับโหนดข้อความใด ๆ :
ข้อความทดสอบโหนด () เป็นจริงสำหรับโหนดข้อความใด ๆ ตัวอย่างเช่น child :: text () จะเลือกชายด์โหนดข้อความของโหนดบริบท
มีที่กล่าวว่า//*[contains(text(), 'ABC')]
ตรงกับองค์ประกอบใด ๆ ( แต่โหนดราก) ABC
ที่โหนดข้อความแรกที่มี เนื่องจากtext()
ส่งคืนชุดโหนดที่มีโหนดข้อความลูกทั้งหมดของโหนดบริบท (สัมพันธ์กับที่นิพจน์ได้รับการประเมิน) แต่contains()
รับเพียงอันแรกเท่านั้น ดังนั้นสำหรับเอกสารด้านบนเส้นทางที่ตรงกับStreet
องค์ประกอบ
นิพจน์ต่อไปนี้//*[text()[contains(., 'ABC')]]
ตรงกับองค์ประกอบใด ๆ ( แต่โหนดราก) ABC
ที่มีอย่างน้อยหนึ่งโหนดข้อความเด็กที่มี .
แสดงถึงโหนดบริบท ในกรณีนี้มันเป็นโหนดข้อความลูกขององค์ประกอบใด ๆ ยกเว้นโหนดรูท ดังนั้นสำหรับเอกสารด้านบนเส้นทางที่ตรงกับStreet
และComment
องค์ประกอบ
ตอนนี้//*[contains(., 'ABC')]
ตรงกับองค์ประกอบใด ๆ (แต่โหนดรูท) ที่มีABC
(ในการเรียงต่อกันของโหนดข้อความลูกหลาน) สำหรับเอกสารด้านบนนั้นตรงกับHome
the Addr
, the Street
, และComment
องค์ประกอบ ด้วยเหตุนี้จึง//*[contains(., 'BLAH ABC')]
ตรงกับHome
the Addr
, และComment
องค์ประกอบ
//*[contains(text(),'ABC')]
แค่คืน<Street>
องค์ประกอบเท่านั้น มันไม่ได้กลับบรรพบุรุษของใด ๆหรือ<Street>
<Comment>