Công cụ kiểm tra XPath

Tài liệu và biểu thức của bạn chỉ nằm trong trình duyệt này.

Dán XML hoặc HTML tối đa 1.000.000 ký tự. Việc đánh giá diễn ra ngay trong trình duyệt này với XPath 1.0.

Hỗ trợ XPath 1.0 tuyệt đối hoặc tương đối. Các prefix được khai báo trong tài liệu sẽ được đăng ký tự động; namespace mặc định có thể dùng qua prefix d.

Viết XPath cho việc thu thập dữ liệu web hay XSLT chỉ là đoán mò nếu bạn không có một môi trường thử trực tiếp. Công cụ này nhận XML hoặc HTML của bạn ở một ô và biểu thức ở ô kia, đánh giá XPath 1.0 bằng chính bộ máy của trình duyệt bạn đang dùng, rồi liệt kê từng nút khớp cùng loại nút, thuộc tính, nội dung văn bản và mã đánh dấu đã tuần tự hóa. Các biểu thức vô hướng như count(//book) trả về giá trị trực tiếp, còn các tiền tố không gian tên khai báo trong tài liệu được tự động đăng ký cho bạn. Mọi thứ chạy trong trình duyệt của bạn: tài liệu không bao giờ được tải lên đâu cả.

Cách kiểm tra một biểu thức XPath

  1. 1

    Dán XML hoặc HTML

    Tính năng tự động phát hiện sẽ chuyển sang phân tích HTML linh hoạt khi thấy doctype hoặc phần tử gốc HTML; bạn cũng có thể buộc dùng chế độ XML hoặc HTML.

  2. 2

    Nhập biểu thức XPath

    Tuyệt đối (`/library/book`) hoặc tương đối (`//div[@class='card']`), bất kỳ biểu thức XPath 1.0 nào.

  3. 3

    Đánh giá

    Bộ máy XPath của trình duyệt chạy truy vấn ngay trên máy bạn; không gửi gì lên máy chủ.

  4. 4

    Xem kết quả

    Mỗi kết quả khớp hiển thị loại nút, thuộc tính, văn bản đã cắt gọn và mã đánh dấu tuần tự hóa; liệt kê tối đa 200 kết quả khớp.

Những điều cốt lõi của XPath 1.0

Biểu thức Khớp với
/books/book Các <book> là con của phần tử gốc <books>
//book Mọi <book> ở bất kỳ đâu trong tài liệu
//book[@id='42'] <book> có thuộc tính id bằng 42
//book[1] <book> đầu tiên của mỗi phần tử cha (không phải của tài liệu)
(//book)[1] <book> đầu tiên trong toàn bộ tài liệu
//book[title='1984'] <book> có văn bản <title> là “1984”
//book/@id Thuộc tính id của mọi phần tử <book>
//book[position() > 1] Mọi <book> trừ cái đầu tiên
//book[last()] <book> cuối cùng của mỗi phần tử cha

Biểu thức vô hướng cũng hoạt động: count(//book) trả về một con số, string(//title) trả về chuỗi, còn boolean(//book[@id]) trả về đúng hoặc sai. Công cụ hiển thị thẳng các giá trị đó thay vì danh sách nút.

Các trục thường dùng ngoài child

  • ancestor::, mọi nút tổ tiên
  • following-sibling::, các nút anh em phía sau nút hiện tại
  • preceding-sibling::, các nút anh em phía trước
  • descendant::, mọi nút hậu duệ
  • attribute:: (viết tắt @), thuộc tính của nút hiện tại
  • parent:: (viết tắt ..), phần tử cha

Điểm khác biệt của HTML

HTML không phải XML nghiêm ngặt, nên công cụ phân tích nó một cách linh hoạt bằng trình phân tích HTML của trình duyệt thay vì trình phân tích XML nghiêm ngặt. Chế độ HTML được tự động phát hiện từ <!DOCTYPE html> hoặc phần tử gốc <html>, và bạn có thể buộc dùng một trong hai chế độ bằng ô chọn chế độ tài liệu. Ở chế độ HTML, tên thẻ và tên thuộc tính bị chuyển thành chữ thường, vì vậy hãy viết XPath bằng chữ thường: //div[@class], không phải //DIV[@CLASS].

Không gian tên

XML có không gian tên đòi hỏi phải đăng ký tiền tố:

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <item>
    <content:encoded>...</content:encoded>
  </item>
</rss>

Công cụ quét tài liệu tìm các khai báo xmlns và tự động đăng ký từng tiền tố, nên //content:encoded chạy được ngay. Không gian tên mặc định (chỉ có xmlns="...") không có tiền tố trong tài liệu, nên công cụ gán nó cho tiền tố d: chọn các phần tử <item> trong một feed dùng không gian tên mặc định bằng //d:item. Các không gian tên đã đăng ký được liệt kê bên cạnh kết quả.

Những gì công cụ này không đánh giá

Trình duyệt đánh giá XPath 1.0, cùng phương ngữ mà hầu hết các bộ công cụ thu thập dữ liệu web sử dụng. Các tính năng của XPath 2.0 trở lên, như matches(string, regex), tokenize(string, delimiter), biểu thức for ... return và toán tử chuỗi giá trị, không thuộc về nó; bạn sẽ tìm thấy chúng trong các bộ công cụ XSLT 2.0/3.0. XPath 1.0 vẫn là lựa chọn dễ mang chuyển nhất cho việc thu thập dữ liệu web.

Mẹo kiểm tra

  • Bắt đầu rộng, rồi thu hẹp. Trước tiên //div, sau đó //div[@class], cuối cùng là giá trị class cụ thể.
  • Kiểm tra khai báo không gian tên. Phần lớn lỗi kiểu “sao XPath của tôi không trả về gì?” là do không gian tên; hãy xem danh sách không gian tên đã đăng ký.
  • Chú ý chữ hoa chữ thường. XML phân biệt hoa thường. Chế độ HTML chuyển tên thành chữ thường.
  • Thử string() khi trích xuất văn bản. //p/text()string(//p) cho kết quả khác nhau khi có mã đánh dấu lồng bên trong.

Câu hỏi thường gặp

Không, chỉ XPath thôi. Hầu hết trình duyệt hỗ trợ cả hai qua document.querySelectorAll (CSS) và document.evaluate (XPath). Hãy dùng cách nào rõ ràng hơn cho việc của bạn.

Việc phân tích HTML chuyển tên thẻ và tên thuộc tính thành chữ thường. Hãy chắc chắn XPath của bạn dùng chữ thường: //div[@class], không phải //DIV[@CLASS]. Cũng nên kiểm tra chế độ: buộc dùng XML trên HTML lỏng lẻo sẽ thất bại với lỗi phân tích, trong khi chế độ HTML phân tích nó một cách linh hoạt.

Các tiền tố khai báo trong tài liệu được tự động đăng ký cho biểu thức của bạn. Không gian tên mặc định được gán cho tiền tố d, nên //d:item chọn các phần tử <item> trong tài liệu dùng không gian tên mặc định. Các liên kết đang hoạt động được liệt kê cùng kết quả.

Không. Tài liệu và biểu thức được đánh giá bởi chính bộ máy XPath của trình duyệt bạn và không được gửi đến máy chủ của chúng tôi, không bị lưu trữ, cũng không bị thêm vào địa chỉ trang; chúng chỉ tồn tại trong phiên trình duyệt này để chế độ xem nhiều bước có thể hiển thị kết quả của bạn.

Công cụ liên quan