Bộ chọn truy vấn nút-html-trình phân tích cú pháp

XPath sử dụng các biểu thức đường dẫn để chọn các nút hoặc tập hợp nút trong tài liệu XML. Nút được chọn bằng cách đi theo một đường dẫn hoặc các bước


Tài liệu Ví dụ XML

Chúng tôi sẽ sử dụng tài liệu XML sau trong các ví dụ bên dưới


Harry Potter29. 99


Học XML39. 95


Chọn nút

XPath sử dụng các biểu thức đường dẫn để chọn các nút trong tài liệu XML. Nút được chọn bằng cách đi theo một đường dẫn hoặc các bước. Các biểu thức đường dẫn hữu ích nhất được liệt kê bên dưới

ExpressionDescriptionnodenameChọn tất cả các nút có tên "nodename"/Chọn từ nút gốc//Chọn các nút trong tài liệu từ nút hiện tại khớp với lựa chọn bất kể chúng ở đâu. Chọn nút hiện tại. Chọn cha của nút hiện tại@Chọn thuộc tính

Trong bảng dưới đây, chúng tôi đã liệt kê một số biểu thức đường dẫn và kết quả của các biểu thức

Biểu thức đường dẫnResultbookstoreChọn tất cả các nút có tên "hiệu sách"/hiệu sáchChọn phần tử gốc hiệu sách

Ghi chú. Nếu đường dẫn bắt đầu bằng dấu gạch chéo ( / ) thì nó luôn đại diện cho một đường dẫn tuyệt đối đến một phần tử

cửa hàng sách/sáchChọn tất cả các phần tử sách là con của cửa hàng sách//bookChọn tất cả các phần tử sách bất kể chúng ở đâu trong tài liệubookstore//bookChọn tất cả các phần tử sách là hậu duệ của phần tử cửa hàng sách, bất kể chúng ở đâu dưới phần tử cửa hàng sách//

Vị ngữ

Các vị từ được sử dụng để tìm một nút cụ thể hoặc một nút chứa một giá trị cụ thể

Vị ngữ luôn được đặt trong dấu ngoặc vuông

Trong bảng dưới đây, chúng tôi đã liệt kê một số biểu thức đường dẫn với các vị từ và kết quả của các biểu thức

Biểu thức đường dẫnResult/bookstore/book[1]Chọn phần tử sách đầu tiên là phần tử con của phần tử hiệu sách

Ghi chú. Trong IE 5,6,7,8,9 nút đầu tiên là [0], nhưng theo W3C, đó là [1]. Để giải quyết vấn đề này trong IE, hãy đặt SelectionLanguage thành XPath

Đây là một ngã ba biên dịch thành các mô-đun esm để sử dụng trực tiếp trong trình duyệt. Bạn cần tải gói javascript "he" vào trình duyệt

Trình phân tích cú pháp HTML nhanh

Trình phân tích cú pháp HTML nhanh là trình phân tích cú pháp HTML rất nhanh. Cái nào sẽ tạo ra một cây DOM được đơn giản hóa, với sự hỗ trợ truy vấn phần tử cơ bản.

Theo thiết kế, nó dự định phân tích các tệp HTML lớn với giá thấp nhất, do đó hiệu suất là ưu tiên hàng đầu. Vì lý do này, một số HTML không đúng định dạng có thể không phân tích cú pháp chính xác, nhưng hầu hết các lỗi thông thường đều được khắc phục (ví dụ:. Kiểu HTML4 không đóng

htmlparser      :26.7111 ms/file ± 170.066
cheerio         :24.2480 ms/file ± 17.1711
parse5          :13.7239 ms/file ± 8.68561
high5           :7.75466 ms/file ± 5.33549
htmlparser2     :5.27376 ms/file ± 8.68456
node-html-parser:2.85768 ms/file ± 2.87784
2,
htmlparser      :26.7111 ms/file ± 170.066
cheerio         :24.2480 ms/file ± 17.1711
parse5          :13.7239 ms/file ± 8.68561
high5           :7.75466 ms/file ± 5.33549
htmlparser2     :5.27376 ms/file ± 8.68456
node-html-parser:2.85768 ms/file ± 2.87784
3, v.v.)

Cài đặt

npm install --save node-html-parser

Ghi chú. khi sử dụng Trình phân tích cú pháp HTML nhanh trong dự án Bản mô tả, phiên bản Bản mô tả tối thiểu được hỗ trợ là

htmlparser      :26.7111 ms/file ± 170.066
cheerio         :24.2480 ms/file ± 17.1711
parse5          :13.7239 ms/file ± 8.68561
high5           :7.75466 ms/file ± 5.33549
htmlparser2     :5.27376 ms/file ± 8.68456
node-html-parser:2.85768 ms/file ± 2.87784
4

Hiệu suất

Nhanh hơn htmlparser2

htmlparser      :26.7111 ms/file ± 170.066
cheerio         :24.2480 ms/file ± 17.1711
parse5          :13.7239 ms/file ± 8.68561
high5           :7.75466 ms/file ± 5.33549
htmlparser2     :5.27376 ms/file ± 8.68456
node-html-parser:2.85768 ms/file ± 2.87784

Đã thử nghiệm với htmlparser-benchmark

Cách sử dụng

import { parse } from 'node-html-parser';

const root = parse('
  • Hello World
'
); console.log(root.firstChild.structure); // ul#list // li // #text console.log(root.querySelector('#list')); // { tagName: 'ul', // rawAttrs: 'id="list"', // childNodes: // [ { tagName: 'li', // rawAttrs: '', // childNodes: [Object], // classNames: [] } ], // id: 'list', // classNames: [] } console.log(root.toString()); //
  • Hello World
root.set_content('
  • Hello World
  • '
    ); root.toString(); //
  • Hello World
  • var HTMLParser = require('node-html-parser');
    
    var root = HTMLParser.parse('
    • Hello World
    '
    );

    phương pháp toàn cầu

    phân tích cú pháp (dữ liệu [, tùy chọn])

    Phân tích cú pháp dữ liệu đã cho và trả về gốc của DOM đã tạo

    • dữ liệu, dữ liệu để phân tích cú pháp

    • tùy chọn, tùy chọn phân tích cú pháp

      {
        lowerCaseTagName: false,  // convert tag name to lower case (hurt performance heavily)
        comment: false            // retrieve comments (hurt performance slightly)
        blockTextElements: {
          script: true,	// keep text content when parsing
          noscript: true,	// keep text content when parsing
          style: true,		// keep text content when parsing
          pre: true			// keep text content when parsing
        }
      }

    hợp lệ(dữ liệu[, tùy chọn])

    Phân tích cú pháp dữ liệu đã cho, trả về true nếu dữ liệu đã cho hợp lệ và trả về false nếu không

    Phương thức phần tử HTML

    HTMLElement#trimRight()

    Cắt phần tử từ bên phải (trong khối) sau khi nhìn thấy mẫu trong TextNode

    HTMLElement#removeWhitespace()

    Xóa khoảng trắng trong cây con này

    HTMLElement#querySelectorAll(bộ chọn)

    Truy vấn bộ chọn CSS để tìm các nút phù hợp

    Ghi chú. chỉ hỗ trợ bộ chọn

    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    5,
    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    6,
    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    0. Và không hoạt động giống như
    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    1 tiêu chuẩn vì nó sẽ ngừng tìm kiếm cây con sau khi tìm thấy kết quả phù hợp

    HTMLElement#querySelector(bộ chọn)

    Truy vấn CSS Selector để tìm nút phù hợp

    HTMLElement#appendChild(nút)

    Nối một nút con vào nút con

    HTMLElement#insertAdjacentHTML(ở đâu, html)

    phân tích cú pháp văn bản đã chỉ định dưới dạng HTML và chèn các nút kết quả vào cây DOM tại một vị trí đã chỉ định

    HTMLElement#setAttribute(key. Chuỗi giá trị. chuỗi)

    Đặt thuộc tính

    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    2 thành
    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    3

    HTMLElement#setAttributes(attrs: Record)

    Đặt thuộc tính của phần tử

    HTMLElement#removeAttribute(key. chuỗi)

    Xóa thuộc tính

    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    3

    HTMLElement#getAttribute(khóa. chuỗi)

    Nhận thuộc tính

    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    3

    HTMLElement#exchangeChild(oldNode. Nút, nút mới. Nút)

    Đổi con đã cho lấy con mới

    HTMLElement#removeChild(nút. Nút)

    Xóa nút con

    HTMLElement#toString()

    Tương tự như bên ngoàiHTML

    HTMLElement#set_content(nội dung. chuỗi. Nút. Nút[])

    Đặt nội dung. Lưu ý. Không đặt nội dung của nút gốc

    HTMLElement#remove()

    Xóa phần tử hiện tại

    Thuộc tính phần tử HTML

    HTMLElement#text

    Nhận giá trị văn bản chưa thoát của nút hiện tại và các phần tử con của nó. Thích

    htmlparser      :26.7111 ms/file ± 170.066
    cheerio         :24.2480 ms/file ± 17.1711
    parse5          :13.7239 ms/file ± 8.68561
    high5           :7.75466 ms/file ± 5.33549
    htmlparser2     :5.27376 ms/file ± 8.68456
    node-html-parser:2.85768 ms/file ± 2.87784
    6. (chậm lần đầu tiên)