Cách kiểm tra biểu thức XPath
- Dán XML của bạn, mở file hoặc dùng danh mục sản phẩm mẫu.
- Gõ biểu thức XPath hoặc nhấp vào một trong các ví dụ. Kết quả cập nhật ngay khi bạn gõ, và phím Enter thực thi biểu thức ngay lập tức.
- Đọc kết quả: số nút khớp kèm loại và nội dung của chúng, hoặc số, chuỗi hay giá trị boolean mà biểu thức trả về.
Bảng tra cứu nhanh XPath (cheat sheet)
| Biểu thức | Chọn |
|---|---|
/catalog | Phần tử gốc catalog |
//product | Mọi phần tử product, ở bất kỳ độ sâu nào |
/catalog/product/name | name của từng sản phẩm, đi từng bước từ gốc |
//product/@id | Thuộc tính id của mọi sản phẩm |
//product[@category='books'] | Sản phẩm có thuộc tính category là books |
//product[price > 20] | Sản phẩm có giá lớn hơn 20, so sánh theo số |
//product[contains(name, 'USB')] | Sản phẩm có tên chứa “USB” (phân biệt chữ hoa/thường) |
//product[not(tags)] | Sản phẩm không có phần tử con tags |
(//product)[1] | Sản phẩm đầu tiên trong tài liệu |
//product[1] | Sản phẩm đầu tiên bên trong mỗi phần tử cha |
//product[last()] | Sản phẩm cuối cùng bên trong mỗi phần tử cha |
//name/text() | Các nút văn bản bên trong name |
//price/.. | Phần tử cha của mỗi price |
//*[local-name()='product'] | Các phần tử product trong bất kỳ namespace nào |
count(//product) | Số lượng sản phẩm |
sum(//price) | Tổng của tất cả các giá |
string(//product[1]/name) | Tên sản phẩm đầu tiên dưới dạng chuỗi |
Namespace trong XPath
XPath 1.0 không có namespace mặc định. Trong tài liệu có xmlns="…", như sitemap hoặc hóa đơn NF-e, //url sẽ không tìm thấy gì, vì các phần tử thuộc namespace đó. Vì vậy, công cụ ánh xạ namespace mặc định sang tiền tố x: (hoặc d: nếu x đã được dùng), nên //x:url/x:loc sẽ hoạt động. Các tiền tố được khai báo trong tài liệu, như cfdi: trong hóa đơn CFDI, có thể dùng nguyên như khi viết. Trong các công cụ không có thiết lập namespace, //*[local-name()='url'] hoạt động ở mọi nơi.
Câu hỏi thường gặp
Công cụ hỗ trợ phiên bản XPath nào?
XPath 1.0, phiên bản được tích hợp sẵn trong mọi trình duyệt và hầu hết thư viện XML. Các hàm từ XPath 2.0 trở lên, như matches(), lower-case() hoặc string-join(), không được hỗ trợ.
Tại sao XPath của tôi không trả về kết quả nào?
Nguyên nhân phổ biến nhất là namespace mặc định (hãy dùng tiền tố x: hiển thị bên dưới các ví dụ), khác biệt chữ hoa/thường – XPath phân biệt chữ hoa và chữ thường – và vị trí, vốn bắt đầu từ 1 chứ không phải 0.
Hiển thị bao nhiêu kết quả?
Tất cả kết quả khớp đều được đếm, và 500 kết quả đầu tiên được liệt kê kèm loại nút và nội dung.
XML của tôi có bị tải lên không?
Không. XML được phân tích và truy vấn ngay trong trình duyệt của bạn. Chỉ URL mà bạn tải mới được lấy thông qua máy chủ của chúng tôi.