SOFTWARE DEVELOPMENT | 5 mins read

รู้จัก XPath ตัวชี้ทางเพื่อใช้หา element

By Karn Tawitkarn on 27 Apr 2021
sennalabs-blog-banner

XPath เป็นตัวชี้ทางเพื่อใช้หา element ใน ภาษา XML และ HTML เอกสารที่เป็น XML และ HTML จะมีข้อมูลที่ถูกครอบด้วยแท็กอยู่ ในส่วนของ HTML แท็กจะเป็นตัวกำหนดลักษณะที่ปรากฏของข้อมูลที่อยู่ภายในแท็ก เช่น <h1> Header </h1> tag h1 จะทำหน้าที่เน้น ตัวอักษรที่อยู่ภายในให้มีลักษณะ ใหญ่กว่าตัวอักษรที่อยู่ภายนอก มักใช้เป็นหัวเรื่องของเว็บไซต์โดยชื่อของ tag ต่าง ๆ และลักษณะของข้องมูลที่อยู่ภานใน จะถูกกำหนดไว้แล้ว ส่วน XML นั้น tag จะถูกใช้ในการเก็บข้อมูล และ โครงสร้างของข้อมูลนั้น ๆ

<?xml version="1.0" encoding="UTF-8"?>
                <friend>
                  <first_name>Tove</first_name>
                  <last_name>Jani</first_name>
                  <phone_number>+660123456789</phone_number>
                </friend>

ตัวอย่างการเก็บข้อมูลโดยใช้ XML 

ประเภทของ XPath

XPath แบ่งออกเป็น 2 ประเภท ดังนี้

1. Absolute XPath

เป็นการเขียนแบบเรียงลำดับชั้นตาม tag ไปตรง ๆ ตั้งแต่ tag ตัวแรกเรียงไปจนถึง tag ของ element ที่ต้องการค้นหา ข้อเสียของการเขียน Absolute XPath คือ การอ่านเข้าใจยาก และ ถ้า tag ลำดับก่อนหน้ามีการเปลี่ยนแปลง จะทำให้ XPath ที่เคยเขียนไว้ หา element ไม่เจอ

2. Relative XPath

เป็นการเขียนเพื่อระบุเจาะจง ​element ที่จะหาได้เลย ไม่ต้องไล่ลำดับจาก tag ตัวแรกก่อน โดยสามารถ ระบุ tag name หรือ attibute  อย่างเช่น name class id ของ element ได้ด้วย ข้อดีของการเขียน Relative XPath คือ ความยืดหยุ่นในการใช้งาน ถ้าหากลำดับก่อนหน้ามีการเปลี่ยนแปลงก็จะไม่ส่งผลกระทบกับ XPath ที่เคยเขียนไว้

<!DOCTYPE html>
                <html>
                  <head>
                    <title>Page Title</title>
                  </head>
                  <body>
                    <h1>This is a Heading</h1>
                    <p>This is a paragraph.</p>
                  </body>
                </html>

 

ตัวอย่างการเขียน XPath เพื่อใช้ชี้ตำแหน่ง Heading ของเอกสาร HTML ด้านบน

 Absolute XPath 

            /html/body/h1

Relative XPath

//h1


XPath Syntax การชี้ตำแหน่ง

  1. nodename หรือ ชื่อ tag เลือก tag ทั้งหมดที่มีชื่อ nodename
  2. / เลือกลำดับถัดไปจากตำแหน่งปัจจุบัน
  3. // เลือกลำดับได้ก็ได้จากตำแหน่งปัจจุบัน
  4. . เลือกตำแหน่งปัจจุบัน
  5. .. เลือก parent ของตำแหน่งปัจจุบัน
  6. @ เลือก attributes
<?xml version="1.0" encoding="UTF-8"?>
                <bookstore>
                  <book>
                    <title lang="en">Harry Potter</title>
                    <price>29.99</price>
                  </book>
                  <book>
                    <title lang="en">Learning XML</title>
                    <price>39.95</price>
                  </book>
                </bookstore>

 

ตัวอย่างการชี้ตำแหน่งเอกสาร XML โดยใช้ XPath

  1. bookstore เลือก element bookstore ทั้งหมด
  2. /bookstore เลือก element bookstore จากตำแหน่งปัจจุบัน
  3. bookstore/book เลือก element book ทั้งหมด ที่อยู่ลำดับชั้นที่ 1 ภายใน element bookstore ในตำแหน่งใดก็ได้
  4. //book เลือก element book ทั้งหมดที่อยู่ในลำดับใดก็ได้จากตำแหน่งปัจจุบัน
  5. bookstore//book เลือก element book ทั้งหมด ที่อยู่ลำดับชั้นใดก็ได้ element bookstore ในตำแหน่งใดก็ได้
  6. //@lang เลือก element ที่มี attributes lang ทั้งหมด

 

การชี้ตำแหน่งแบบเจาะจง

  1. /bookstore/book[1] เลือก element book ตัวแรก ที่อยู่ลำดับชั้นที่ 1 ภายใน element bookstore ในตำแหน่งปัจจุบัน
  2. /bookstore/book[last()] เลือก element book ตัวสุดท้าย ที่อยู่ลำดับชั้นที่ 1 ภายใน element bookstore ในตำแหน่งปัจจุบัน
  3. /bookstore/book[last()-1] เลือก element book ตัวก่อนหน้าตัวสุดท้าย ที่อยู่ลำดับชั้นที่ 1 ภายใน element bookstore ในตำแหน่งปัจจุบัน
  4. /bookstore/book[position()<3] เลือก element book 2ตัวแรก ที่อยู่ลำดับชั้นที่ 1 ภายใน element bookstore ในตำแหน่งปัจจุบัน
  5. //title[@lang] เลือก element title และมี attributes lang ทั้งหมด ในตำแหน่งใดก็ได้
  6. //title[@lang='en'] เลือก element title และมี attributes lang มีค่าเป็น “en” ทั้งหมด ในตำแหน่งใดก็ได้
  7. /bookstore/book[price>35.00]  เลือก element book ที่มี element price มีค่ามากกว่า 35 ที่อยู่ลำดับชั้นที่ 1 ภายใน element bookstore ในตำแหน่งปัจจุบัน
  8. /bookstore/book[price>35.00]/title เลือก element title ที่อยูในลำดับชั้นที่ 1 ใน element book ที่มี element price มีค่ามากกว่า 35 อยู่ลำดับชั้นที่ 1 ภายใน element bookstore ในตำแหน่งปัจจุบัน

 

Written By