2012-05-08 20 views
5

Tôi đã sử dụng đối tượng DOMParser để phân tích một chuỗi văn bản thành một cây XML. Tuy nhiên nó không có sẵn trong ngữ cảnh của một Web Worker (và không phải là, tất nhiên, document.ELEMENT_NODE hoặc các hằng số khác cần thiết). Có cách nào khác để làm điều đó không?Phân tích cú pháp XML trong một Web Worker

Xin lưu ý rằng tôi không muốn thao tác DOM của trang hiện tại. Tệp XML sẽ không chứa các phần tử HTML hoặc bất kỳ thứ gì sắp xếp. Trong thực tế, tôi không muốn chạm vào đối tượng tài liệu chút nào. Tôi chỉ muốn cung cấp chuỗi văn bản như sau:

<car color="blue"><driver/></car> 

... và lấy lại cấu trúc cây phù hợp và cách di chuyển nó. Tôi cũng không quan tâm đến việc xác nhận lược đồ hoặc bất cứ điều gì ưa thích. Tôi biết về XML for <SCRIPT>, mà nhiều người có thể thấy hữu ích (vì vậy tôi liên kết với nó ở đây), tuy nhiên việc cấp phép của nó không thực sự phù hợp với tôi. Tôi không chắc liệu jQuery có chứa một trình phân tích cú pháp XML hay không, nhưng ngay cả khi nó thực hiện (và nó có thể sử dụng bên trong một Worker), tôi sẽ không bao gồm thêm một dòng mã 50K Chức năng này.

Tôi cho rằng tôi có thể viết một trình phân tích cú pháp XML đơn giản trong JavaScript, tôi chỉ tự hỏi nếu tôi thiếu tùy chọn nhanh hơn.

Trả lời

4

theo spec

DOM API (đối tượng Node, các đối tượng Document, vv) không có sẵn cho người lao động trong phiên bản này của đặc tả này.

Tôi đoán đó là lý do DOMParser không thể thực hiện được, nhưng tôi thực sự không hiểu tại sao quyết định đó được đưa ra. (Lấy và xử lý một tài liệu XML trong một WebWorker không có vẻ unreasonnable)

nhưng bạn có thể nhập các công cụ khác có sẵn: a "Cross Platform XML Parsing in JavaScript"

+2

Dường như một số trình duyệt như Firefox phải sử dụng chuỗi chính trong trình phân tích cú pháp XML, nguồn: http: //w3-org.9356 .n7.nabble.com/Limited-DOM-in-Web-Workers-td44284.html –

+0

Thật đáng buồn nhưng xmljs là rất chậm (so với DOMParser) – SalientBrain

2

Tại thời điểm này, tôi muốn chia sẻ phân tích cú pháp của tôi: https://github.com/tobiasnickel/tXml

với tXml của nó() phương pháp bạn có thể phân tích một chuỗi thành một đối tượng và nó chỉ mất 0,5kb minified + gzipped