2012-05-08 69 views
5

Używam obiektu DOMParser do parsowania łańcucha tekstowego do drzewa XML. Jednak nie jest on dostępny w kontekście Web Worker (i nie jest to oczywiście dokument.ELEMENT_NODE lub różne inne stałe, które byłyby potrzebne). Czy jest jakiś inny sposób na zrobienie tego?Parsowanie XML w Web Worker

Należy pamiętać, że nie chcę manipulować DOM bieżącej strony. Plik XML nie będzie zawierać elementów HTML ani niczego podobnego. W rzeczywistości nie chcę w ogóle dotykać obiektu dokumentu. Ja po prostu chcę, aby zapewnić tekst tak:

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

... i wrócić odpowiednią strukturę drzewa i sposób jego przemieszczenia. Nie dbam także o walidację schematu ani o nic szczególnego. Wiem o XML for <SCRIPT>, którego wiele może się przydać (stąd link do tego tutaj), jednak jego licencjonowanie nie jest dla mnie odpowiednie. Nie jestem pewien, czy jQuery zawiera parser XML (jestem całkiem nowy w tym temacie), ale nawet jeśli to zrobi (i będzie użyteczne w Robotniku), nie doda bym dodatkowych ~ 50K wierszy kodu tylko dla ta funkcja.

Przypuszczam, że mógłbym napisać prosty parser XML w JavaScript, po prostu zastanawiam się, czy brakuje mi szybszej opcji.

Odpowiedz

4

według spec

DOM API (obiekty węzła obiektów dokument, etc.) nie są dostępne dla pracowników w tej wersji tej specyfikacji.

Domyślam się, że to jest powód, dla którego DOMParser nie jest dostępny, ale tak naprawdę nie rozumiem, dlaczego ta decyzja została podjęta. (Pobieranie i przetwarzanie dokumentu XML w WebWorker nie wydaje unreasonnable)

ale można importować inne narzędzia dostępne: a "Cross Platform XML Parsing in JavaScript"

+2

Podobno niektóre przeglądarki, takie jak Firefox, muszą używać głównego wątku w parserze XML, źródło: http: //w3-org.9356 .n7.nabble.com/Limited-DOM-in-Web-Workers-td44284.html –

+0

To jest smutne, ale xmljs to bardzo powolny (w porównaniu z DOMParser) – SalientBrain

2

W tym momencie chciałbym podzielić się moją parser: https://github.com/tobiasnickel/tXml

z tXml Metoda() można sparsować ciąg znaków do obiektu i zajmuje tylko 0,5kb minified + gzipped