เอกสาร 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(ในการเรียงต่อกันของโหนดข้อความลูกหลาน) สำหรับเอกสารด้านบนนั้นตรงกับHomethe Addr, the Street, และCommentองค์ประกอบ ด้วยเหตุนี้จึง//*[contains(., 'BLAH ABC')]ตรงกับHomethe Addr, และCommentองค์ประกอบ
//*[contains(text(),'ABC')]แค่คืน<Street>องค์ประกอบเท่านั้น มันไม่ได้กลับบรรพบุรุษของใด ๆหรือ<Street><Comment>