XPath - location path [relative location]

ความรู้เกี่ยวกับ XML RML และ ภาษา Markup อื่นๆ

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
chbbk
PHP VIP Members
PHP VIP Members
โพสต์: 2972
ลงทะเบียนเมื่อ: 08/09/2014 10:34 am

XPath - location path [relative location]

โพสต์โดย chbbk » 13/09/2014 3:17 pm

relative path คือการระบุเส้นทางผ่าน node โดยใช้ความสัมพันธ์ระหว่าง node ตามแบบโครงสร้างข้อมูลต้นไม้เป็นตัวอ้างอิงการระบุ
(อธิบายความสัมพันธ์ของแต่ละnodeตามโครงสร้างข้อมูลแบบต้นไม้ดูได้ที่นี่ค่ะ)
viewtopic.php?f=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 บรรพบุรุษ โอเค จบ :lol: )
T1.jpg
T1.jpg (32.63 KiB) เปิดดู 1255 ครั้ง

ตัวอย่าง
ให้ B2 เป็น current node
ancestor::*
ฺB2 คือ node ที่อยู่ปัจจุบัน ถ้าถามว่าบรรพบุรุษของ B2 มีใครบ้างก็เริ่มนับลำดับย้อนขึ้นไปจากความใกล้ชิดก่อนก็จะได้ B และ MARY ตามลำดับ
count(ancestor::*) จะได้ค่ากลับมาเป็น 2

ancestor-or-self
คล้ายกับ ancestor แต่นับรวมตัวเองเข้าไปด้วย
T2.jpg
T2.jpg (32.16 KiB) เปิดดู 1255 ครั้ง

ตัวอย่าง
ให้ B2 เป็น current node
ancestor-or-self::*
cฺount(ancestor-or-self::*) จะได้ค่ากลับมาเป็น 3

child
เลือกเฉพาะ node ลูกของตัวเอง ไม่รวมตัวเองและหลานเหลนโหลน(grand child)
T3.jpg
T3.jpg (28.19 KiB) เปิดดู 1255 ครั้ง

ตัวอย่าง
ให้ C เป็น current node
child::*
เลือก node ลูกของ C ก็จะได้ C1 และ C2 ตามลำดับ
count(child::*) จะได้ค่ากลับมาเป็น 2

descendant
เลือก node ที่เป็นทายาทของตัวเองทั้งหมด
T4.jpg
T4.jpg (33.16 KiB) เปิดดู 1255 ครั้ง

ตัวอย่าง
ให้ C เป็น current node
descendant::*
เลือก node ลูกหลานของ C ทั้งหมด จะได้ C1 C2 CA1 CA2 ตามลำดับ
count(descendant::*) จะได้ค่ากลับมาเป็น 4

descendant-or-self
คล้ายกับ descendant คือเลือก node ที่เป็นทายาททั้งหมดแต่รวมตัวเองเข้าไปด้วย
T5.jpg
T5.jpg (33.86 KiB) เปิดดู 1255 ครั้ง

ตัวอย่าง
ให้ 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
T6.jpg (42.13 KiB) เปิดดู 1254 ครั้ง

ตัวอย่าง
ให้ B เป็น current node
following::*
ทุก node ที่อยู่ถัดจากB ก็จะได้เป็น C, C1, C2, CA1, CA2, D, D1, D2
count(following::ฺ*) จะได้ค่ากลับมาเป็น 8

following-sibling
เฉพาะ node พี่น้องของตัวเองเท่านั้น ไม่รวมลูกหลานของพี่น้อง
T7.jpg
T7.jpg (29.9 KiB) เปิดดู 1254 ครั้ง

ตัวอย่าง
ให้ B เป็น current node
following-sibling::*
เลือก node พี่น้องของ B ก็จะได้เป็น C, D ตามลำดับ
count(following-sibling::*) จะได้ค่ากลับมาเป็น 2
แก้ไขล่าสุดโดย chbbk เมื่อ 15/09/2014 1:45 am, แก้ไขไปแล้ว 10 ครั้ง.
Trust me, I'm a Programmer

ภาพประจำตัวสมาชิก
chbbk
PHP VIP Members
PHP VIP Members
โพสต์: 2972
ลงทะเบียนเมื่อ: 08/09/2014 10:34 am

Re: XPath Axes

โพสต์โดย chbbk » 13/09/2014 4:14 pm

parent
เฉพาะ node พ่อแม่ของตัวเองเท่านั้น ต่างกับ ancestor ที่นับรวมถึงพ่อแม่ของพ่อแม่ด้วย
T8.jpg
T8.jpg (27.58 KiB) เปิดดู 1254 ครั้ง

ตัวอย่าง
ให้ B2 เป็น current node
parent::*
เลือก node พ่อแม่ของ B2 ก็จะได้เป็น B เพียงตัวเดียว ไม่รวมถึง MARY

preceding
เฉพาะ node พี่น้องและลูกหลานของพี่น้องที่อยู่ลำดับก่อนหน้าตัวเอง(ตรงข้ามกับ following)
T9.jpg
T9.jpg (29.39 KiB) เปิดดู 1254 ครั้ง

ตัวอย่าง
ให้ B เป็น current node
preceding::*
เลือก node พี่น้องและลูกหลานของพี่น้องที่อยู่ลำดับก่อนB จะได้เป็น A2, A1, A ตามลำดับ
count(preceding::*) จะได้ค่ากลับมาเป็น 3

preceding-sibling
เฉพาะ node พี่น้องที่อยู่ลำดับก่อนตัวเอง (ไม่รวมลูกหลานของพี่น้อง)
T10.jpg
T10.jpg (26.71 KiB) เปิดดู 1254 ครั้ง

ตัวอย่าง
ให้ B เป็น current node
preceding-sibling::*
เลือกแค่ node พี่น้องที่อยู่ลำดับก่อน B จะได้เป็น A
count(preceding-sibling::*) จะได้ค่ากลับมาเป็น 1

self
เลือกตัวเอง
T11.jpg
T11.jpg (25.49 KiB) เปิดดู 1254 ครั้ง

ตัวอย่าง
ให้ B เป็น current node
[self::*]
เลือกตัวเอง คือ B
Trust me, I'm a Programmer

ภาพประจำตัวสมาชิก
fern2535
PHP Super Member
PHP Super Member
โพสต์: 317
ลงทะเบียนเมื่อ: 04/08/2015 10:18 am

Re: XPath - location path [relative location]

โพสต์โดย fern2535 » 05/08/2015 11:55 am

:icon_plusone:

ballthai2015
PHP Newbie
PHP Newbie
โพสต์: 8
ลงทะเบียนเมื่อ: 21/07/2015 5:35 pm

Re: XPath - location path [relative location]

โพสต์โดย ballthai2015 » 05/08/2015 2:59 pm

ขอบคุณนะคะ มีประโยชน์มากๆ
https://plus.google.com/115579399778656608218


ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 1 และ บุคคลทั่วไป 0 ท่าน