relative path คือการระบุเส้นทางผ่าน node โดยใช้ความสัมพันธ์ระหว่าง node ตามแบบโครงสร้างข้อมูลต้นไม้เป็นตัวอ้างอิงการระบุ
(อธิบายความสัมพันธ์ของแต่ละnodeตามโครงสร้างข้อมูลแบบต้นไม้ดูได้ที่นี่ค่ะ)
https://www.mindphp.com/forums/viewtopic ... 77&t=18492
การใช้จะเรียงลำดับตามลำดับก่อนหลังในเอกสาร xml ถ้ามีการเรียก node child และ node sibling พร้อมกัน node child จะได้ประมวลผลออกมาก่อนเสมอ (ความสัมพันธ์ใกล้ชิดกว่า)
รูปแบบ Syntax ของการระบุเส้นทางแบบ relative location
axisname::nodetest[predicate]
*nodetest คือการระบุ node ที่เราต้องการ
*predicate คือตัวที่ช่วยให้เราระบุลักษณะของ node ได้แม่นยำขึ้น เช่น price>35, @lang='en'
XPath มี axisname อะไรให้ใช้บ้าง
ancestor
เลือก parent node (node พ่อแม่ พ่อแม่ของพ่อแม่ พ่อแม่ของพ่อแม่ของพ่อแม่ งงล่ะสิ สรุปรวมๆเรียกว่า node บรรพบุรุษ โอเค จบ
)
- T1.jpg (32.63 KiB) Viewed 6526 times
ตัวอย่าง
ให้ B2 เป็น current node
ancestor::*
ฺB2 คือ node ที่อยู่ปัจจุบัน ถ้าถามว่าบรรพบุรุษของ B2 มีใครบ้างก็เริ่มนับลำดับย้อนขึ้นไปจากความใกล้ชิดก่อนก็จะได้ B และ MARY ตามลำดับ
count(ancestor::*) จะได้ค่ากลับมาเป็น 2
ancestor-or-self
คล้ายกับ ancestor แต่นับรวมตัวเองเข้าไปด้วย
- T2.jpg (32.16 KiB) Viewed 6526 times
ตัวอย่าง
ให้ B2 เป็น current node
ancestor-or-self::*
cฺount(ancestor-or-self::*) จะได้ค่ากลับมาเป็น 3
child
เลือกเฉพาะ node ลูกของตัวเอง ไม่รวมตัวเองและหลานเหลนโหลน(grand child)
- T3.jpg (28.19 KiB) Viewed 6526 times
ตัวอย่าง
ให้ C เป็น current node
child::*
เลือก node ลูกของ C ก็จะได้ C1 และ C2 ตามลำดับ
count(child::*) จะได้ค่ากลับมาเป็น 2
descendant
เลือก node ที่เป็นทายาทของตัวเองทั้งหมด
- T4.jpg (33.16 KiB) Viewed 6526 times
ตัวอย่าง
ให้ C เป็น current node
descendant::*
เลือก node ลูกหลานของ C ทั้งหมด จะได้ C1 C2 CA1 CA2 ตามลำดับ
count(descendant::*) จะได้ค่ากลับมาเป็น 4
descendant-or-self
คล้ายกับ descendant คือเลือก node ที่เป็นทายาททั้งหมดแต่รวมตัวเองเข้าไปด้วย
- T5.jpg (33.86 KiB) Viewed 6526 times
ตัวอย่าง
ให้ C เป็น current node
descendant-or-self::*
จะเลือก node ลูกหลานทั้งหมดของC และตัว node C เอง จะได้ C C1 C2 CA1 CA2 ตามลำดับ
count(descendant-or-self::*) จะได้ค่ากลับมาเป็น 5
following
ทุก node ที่ลำดับญาติอยู่ถัดจากตัวเองแต่ไม่รวมตัวเอง
คือ node พี่น้อง และลูกหลานของพี่น้องด้วย
- T6.jpg (42.13 KiB) Viewed 6525 times
ตัวอย่าง
ให้ B เป็น current node
following::*
ทุก node ที่อยู่ถัดจากB ก็จะได้เป็น C, C1, C2, CA1, CA2, D, D1, D2
count(following::ฺ*) จะได้ค่ากลับมาเป็น 8
following-sibling
เฉพาะ node พี่น้องของตัวเองเท่านั้น ไม่รวมลูกหลานของพี่น้อง
- T7.jpg (29.9 KiB) Viewed 6525 times
ตัวอย่าง
ให้ B เป็น current node
following-sibling::*
เลือก node พี่น้องของ B ก็จะได้เป็น C, D ตามลำดับ
count(following-sibling::*) จะได้ค่ากลับมาเป็น 2
relative path คือการระบุเส้นทางผ่าน node โดยใช้ความสัมพันธ์ระหว่าง node ตามแบบโครงสร้างข้อมูลต้นไม้เป็นตัวอ้างอิงการระบุ
(อธิบายความสัมพันธ์ของแต่ละnodeตามโครงสร้างข้อมูลแบบต้นไม้ดูได้ที่นี่ค่ะ)
https://www.mindphp.com/forums/viewtopic.php?f=77&t=18492
การใช้จะเรียงลำดับตามลำดับก่อนหลังในเอกสาร xml ถ้ามีการเรียก node child และ node sibling พร้อมกัน node child จะได้ประมวลผลออกมาก่อนเสมอ (ความสัมพันธ์ใกล้ชิดกว่า)
รูปแบบ Syntax ของการระบุเส้นทางแบบ relative location
[quote]axisname::nodetest[predicate][/quote]
*nodetest คือการระบุ node ที่เราต้องการ
*predicate คือตัวที่ช่วยให้เราระบุลักษณะของ node ได้แม่นยำขึ้น เช่น price>35, @lang='en'
[color=#BF0000]XPath มี axisname อะไรให้ใช้บ้าง[/color]
[b][color=#BF00BF][size=150]ancestor [/size][/color][/b]
เลือก parent node (node พ่อแม่ พ่อแม่ของพ่อแม่ พ่อแม่ของพ่อแม่ของพ่อแม่ งงล่ะสิ สรุปรวมๆเรียกว่า node บรรพบุรุษ โอเค จบ :lol: )
[attachment=6]T1.jpg[/attachment]
ตัวอย่าง
ให้ B2 เป็น current node
ancestor::*
ฺB2 คือ node ที่อยู่ปัจจุบัน ถ้าถามว่าบรรพบุรุษของ B2 มีใครบ้างก็เริ่มนับลำดับย้อนขึ้นไปจากความใกล้ชิดก่อนก็จะได้ B และ MARY ตามลำดับ
count(ancestor::*) จะได้ค่ากลับมาเป็น 2
[b][color=#BF00FF][size=150]ancestor-or-self[/size] [/color][/b]
คล้ายกับ ancestor แต่นับรวมตัวเองเข้าไปด้วย
[attachment=5]T2.jpg[/attachment]
ตัวอย่าง
ให้ B2 เป็น current node
ancestor-or-self::*
cฺount(ancestor-or-self::*) จะได้ค่ากลับมาเป็น 3
[b][color=#BF00FF][size=150]child[/size][/color][/b]
เลือกเฉพาะ node ลูกของตัวเอง ไม่รวมตัวเองและหลานเหลนโหลน(grand child)
[attachment=4]T3.jpg[/attachment]
ตัวอย่าง
ให้ C เป็น current node
child::*
เลือก node ลูกของ C ก็จะได้ C1 และ C2 ตามลำดับ
count(child::*) จะได้ค่ากลับมาเป็น 2
[b][color=#BF00FF][size=150]descendant[/size][/color][/b]
เลือก node ที่เป็นทายาทของตัวเองทั้งหมด
[attachment=3]T4.jpg[/attachment]
ตัวอย่าง
ให้ C เป็น current node
descendant::*
เลือก node ลูกหลานของ C ทั้งหมด จะได้ C1 C2 CA1 CA2 ตามลำดับ
count(descendant::*) จะได้ค่ากลับมาเป็น 4
[b][color=#BF00FF][size=150]descendant-or-self[/size][/color][/b]
คล้ายกับ descendant คือเลือก node ที่เป็นทายาททั้งหมดแต่รวมตัวเองเข้าไปด้วย
[attachment=2]T5.jpg[/attachment]
ตัวอย่าง
ให้ C เป็น current node
descendant-or-self::*
จะเลือก node ลูกหลานทั้งหมดของC และตัว node C เอง จะได้ C C1 C2 CA1 CA2 ตามลำดับ
count(descendant-or-self::*) จะได้ค่ากลับมาเป็น 5
[b][color=#BF00FF][size=150]following[/size][/color][/b]
ทุก node ที่ลำดับญาติอยู่ถัดจากตัวเองแต่ไม่รวมตัวเอง
คือ node พี่น้อง และลูกหลานของพี่น้องด้วย
[attachment=1]T6.jpg[/attachment]
ตัวอย่าง
ให้ B เป็น current node
following::*
ทุก node ที่อยู่ถัดจากB ก็จะได้เป็น C, C1, C2, CA1, CA2, D, D1, D2
count(following::ฺ*) จะได้ค่ากลับมาเป็น 8
[b][color=#BF00FF][size=150]following-sibling[/size][/color][/b]
เฉพาะ node พี่น้องของตัวเองเท่านั้น ไม่รวมลูกหลานของพี่น้อง
[attachment=0]T7.jpg[/attachment]
ตัวอย่าง
ให้ B เป็น current node
following-sibling::*
เลือก node พี่น้องของ B ก็จะได้เป็น C, D ตามลำดับ
count(following-sibling::*) จะได้ค่ากลับมาเป็น 2