2012-05-08 27 views
5

He estado usando un objeto DOMParser para analizar una cadena de texto en un árbol XML. Sin embargo, no está disponible en el contexto de un Trabajador web (y tampoco lo es, por supuesto, document.ELEMENT_NODE o las otras constantes que serían necesarias). ¿Hay alguna otra manera de hacer eso?Analizando XML en un Trabajador Web

Tenga en cuenta que no quiero manipular el DOM de la página actual. El archivo XML no contendrá elementos HTML ni nada por el estilo. De hecho, no quiero tocar el objeto del documento en absoluto. Quiero simplemente para proporcionar una cadena de texto como el siguiente:

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

... y volver a una estructura de árbol adecuado y una forma de atravesarlo. Tampoco me importa la validación de esquema ni nada sofisticado. Sé de XML for <SCRIPT>, que muchos pueden encontrarle útil (por lo tanto, me estoy vinculando aquí), sin embargo, su licencia no es realmente adecuada para mí. No estoy seguro de si jQuery incluye un analizador XML (soy bastante nuevo en esto), pero incluso si lo hace (y se puede usar dentro de un Worker), no incluiría unas ~ 50K líneas de código adicionales solo para esta función.

Supongo que podría escribir un analizador XML simple en JavaScript, me pregunto si me falta una opción más rápida.

Respuesta

4

de acuerdo con las spec

Las API DOM (objetos Node, objetos documento, etc.) no están disponibles para los trabajadores en esta versión de esta especificación.

Supongo que es por eso que DOMParser no está disponible, pero realmente no entiendo por qué se tomó esa decisión. (Ir a buscar y procesar un documento XML en un WebWorker no parece unreasonnable)

pero se puede importar otras herramientas disponibles: a "Cross Platform XML Parsing in JavaScript"

+2

Aparentemente, algunos navegadores como Firefox tienen que usar el hilo principal en el analizador XML, fuente: http: //w3-org.9356 .n7.nabble.com/Limited-DOM-in-Web-Workers-td44284.html –

+0

Es triste pero xmljs es muy lento (comparado con DOMParser) – SalientBrain

2

En este punto me gustaría compartir mi analizador: https://github.com/tobiasnickel/tXml

con su tXml() método puede analizar una cadena en un objeto y solo necesita 0.5kb minified + gzipped