วิธีทดสอบนิพจน์ XPath
- วาง XML เปิดไฟล์ หรือใช้แคตตาล็อกสินค้าตัวอย่าง
- พิมพ์นิพจน์ XPath หรือคลิกตัวอย่างใดตัวอย่างหนึ่ง ผลลัพธ์จะอัปเดตขณะพิมพ์ และกด Enter เพื่อประมวลผลทันที
- อ่านผลลัพธ์: จำนวนโหนดที่ตรงกันพร้อมประเภทและเนื้อหา หรือค่าตัวเลข สตริง หรือ boolean ที่นิพจน์ส่งกลับ
ตารางสรุป XPath (Cheat Sheet)
| นิพจน์ | สิ่งที่เลือก |
|---|---|
/catalog | อิลิเมนต์ราก catalog |
//product | อิลิเมนต์ product ทุกตัว ในทุกระดับความลึก |
/catalog/product/name | name ของสินค้าแต่ละรายการ ไล่ทีละขั้นจากราก |
//product/@id | แอตทริบิวต์ id ของสินค้าทุกรายการ |
//product[@category='books'] | สินค้าที่แอตทริบิวต์ category มีค่าเป็น books |
//product[price > 20] | สินค้าที่ราคาสูงกว่า 20 โดยเปรียบเทียบแบบตัวเลข |
//product[contains(name, 'USB')] | สินค้าที่ชื่อมีคำว่า “USB” (แยกตัวพิมพ์เล็ก-ใหญ่) |
//product[not(tags)] | สินค้าที่ไม่มีอิลิเมนต์ลูก tags |
(//product)[1] | สินค้ารายการแรกในเอกสาร |
//product[1] | สินค้ารายการแรกภายในอิลิเมนต์แม่แต่ละตัว |
//product[last()] | สินค้ารายการสุดท้ายภายในอิลิเมนต์แม่แต่ละตัว |
//name/text() | โหนดข้อความภายใน name |
//price/.. | อิลิเมนต์แม่ของ price แต่ละตัว |
//*[local-name()='product'] | อิลิเมนต์ product ใน namespace ใดก็ได้ |
count(//product) | จำนวนสินค้า |
sum(//price) | ผลรวมของราคาทั้งหมด |
string(//product[1]/name) | ชื่อสินค้ารายการแรกในรูปแบบสตริง |
Namespace ใน XPath
XPath 1.0 ไม่มี default namespace ในเอกสารที่มี xmlns="…" เช่น sitemap หรือใบแจ้งหนี้ NF-e นิพจน์ //url จะไม่พบอะไรเลย เพราะอิลิเมนต์เหล่านั้นอยู่ใน namespace ดังกล่าว เครื่องมือนี้จึงแมป default namespace ไปยัง prefix x: (หรือ d: ถ้า x ถูกใช้ไปแล้ว) ทำให้ //x:url/x:loc ใช้งานได้ ส่วน prefix ที่ประกาศไว้ในเอกสาร เช่น cfdi: ในใบแจ้งหนี้ CFDI ก็ใช้ได้ตามที่เขียนไว้ ในเครื่องมือที่ไม่มีการตั้งค่า namespace นิพจน์ //*[local-name()='url'] ใช้ได้ทุกที่
คำถามที่พบบ่อย
เครื่องมือนี้รองรับ XPath เวอร์ชันใด?
XPath 1.0 ซึ่งเป็นเวอร์ชันที่มีอยู่ในทุกเบราว์เซอร์และไลบรารี XML ส่วนใหญ่ ฟังก์ชันจาก XPath 2.0 ขึ้นไป เช่น matches(), lower-case() หรือ string-join() จะใช้ไม่ได้
ทำไม XPath ของฉันไม่คืนผลลัพธ์ใดเลย?
สาเหตุที่พบบ่อยที่สุดคือ default namespace (ให้ใช้ prefix x: ที่แสดงอยู่ใต้ตัวอย่าง) ตัวพิมพ์เล็ก-ใหญ่ไม่ตรงกัน – XPath แยกตัวพิมพ์เล็ก-ใหญ่ – และตำแหน่ง (position) ซึ่งเริ่มนับที่ 1 ไม่ใช่ 0
แสดงผลลัพธ์ได้กี่รายการ?
ระบบจะนับผลลัพธ์ที่ตรงกันทั้งหมด และแสดงรายการ 500 รายการแรกพร้อมประเภทโหนดและเนื้อหา
XML ของฉันถูกอัปโหลดหรือไม่?
ไม่ XML จะถูก parse และคิวรีในเบราว์เซอร์ของคุณ มีเพียง URL ที่คุณโหลดเท่านั้นที่ถูกดึงผ่านเซิร์ฟเวอร์ของเรา