tag style script javascript xml json browser parsing

style - Analizador XML para JavaScript



style html (4)

¿Has probado XML para SCRIPT ? Tengo que admitir que nunca lo he usado personalmente, pero he escuchado / leído algunas cosas buenas al respecto.

Pruébalo y tal vez compartas tu experiencia aquí?

Estoy buscando una buena biblioteca de JavaScript para analizar datos XML. Debería ser mucho más fácil de usar que los analizadores XML DOM incorporados en los navegadores.

Me he echado a perder un poco trabajando con JSON y estoy esperando algo en líneas similares para XML.



Yo uso jQuery para esto. Aquí hay un buen ejemplo:

(EDITAR: Nota: el siguiente blog parece haber desaparecido).

http://blog.reindel.com/2007/09/24/jquery-and-xml-revisited/

También hay muchos y buenos ejemplos en la documentación de jQuery :

http://www.webmonkey.com/tutorial/Easy_XML_Consumption_using_jQuery?oldid=20032

EDITAR: Debido a que el blog de mi ejemplo principal se fue, quería agregar otro ejemplo que muestre lo básico y me ayude con los problemas del espacio de nombres:

http://www.zachleat.com/web/selecting-xml-with-javascript/


Descargo de responsabilidad: soy el autor de la biblioteca Jsonix de código abierto que puede ser adecuada para la tarea.

Hace un par de años, también estaba buscando una buena biblioteca de análisis / serialización XML <-> JSON para JavaScript. Necesitaba procesar documentos XML que se ajustaran a esquemas XML bastante complejos. En Java, de forma rutinaria utilizo JAXB para la tarea, así que estaba buscando algo similar:

¿Hay una API de JavaScript para vincular XML, analógica a JAXB para Java?

No pude encontrar una herramienta así en ese entonces.

Así que escribí Jsonix, que considero que es un análogo JAXB para JavaScript.

Puede encontrar Jsonix adecuado, si está interesado en las siguientes características:

  • La conversión XML <-> JSON se basa en una asignación declarativa entre estructuras XML y JSON
  • Esta asignación se puede generar a partir de un esquema XML o se puede escribir manualmente
  • Bidireccional : admite el análisis sintáctico y la serialización (o desasociación / clasificación en otros términos).
  • Soporta elementos , atributos y también considera espacios de nombres definidos en el documento XML.
  • Estrictamente escrito.
  • Estrictamente estructurado.
  • Admite casi todos los tipos incorporados de esquemas XML (incluidos tipos especiales como QName ).
  • Funciona tanto en navegadores como en Node.js , también es compatible con RequireJS / AMD (también para amdefine en Node.js)
  • Tiene una extensa documentación .

Sin embargo, Jsonix puede ser una exageración , si su XML es bastante simple, no tiene un Esquema XML o si no está interesado en el tipado estricto o las estructuras. Verifique sus requisitos.

Ejemplo

Pruébalo en JSFiddle .

Puede tomar un esquema de orden de compra y generar una asignación para él usando el siguiente comando:

java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar -d mappings -p PO purchaseorder.xsd

Obtendrá un archivo PO.js que describe las asignaciones entre estructuras XML y JavaScript. Aquí hay un fragmento de este archivo de mapeo para darle una impresión:

var PO = { name: ''PO'', typeInfos: [{ localName: ''PurchaseOrderType'', propertyInfos: [{ name: ''shipTo'', typeInfo: ''PO.USAddress'' }, { name: ''billTo'', typeInfo: ''PO.USAddress'' }, { name: ''comment'' }, { name: ''orderDate'', typeInfo: ''Calendar'', type: ''attribute'' }, ...] }, { localName: ''USAddress'', propertyInfos: [ ... ] }, ...], elementInfos: [{ elementName: ''purchaseOrder'', typeInfo: ''PO.PurchaseOrderType'' }, ... ] };

Al tener este archivo de mapeo, puedes analizar el XML :

// First we construct a Jsonix context - a factory for unmarshaller (parser) // and marshaller (serializer) var context = new Jsonix.Context([PO]); // Then we create a unmarshaller var unmarshaller = context.createUnmarshaller(); // Unmarshal an object from the XML retrieved from the URL unmarshaller.unmarshalURL(''po.xml'', // This callback function will be provided // with the result of the unmarshalling function (unmarshalled) { // Alice Smith console.log(unmarshalled.value.shipTo.name); // Baby Monitor console.log(unmarshalled.value.items.item[1].productName); });

O serialice su objeto JavaScript como XML:

// Create a marshaller var marshaller = context.createMarshaller(); // Marshal a JavaScript Object as XML (DOM Document) var doc = marshaller.marshalDocument({ name: { localPart: "purchaseOrder" }, value: { orderDate: { year: 1999, month: 10, day: 20 }, shipTo: { country: "US", name: "Alice Smith", street: "123 Maple Street", city: "Mill Valley", state: "CA", zip: 90952 }, billTo: { /* ... */ }, comment: ''Hurry, my lawn is going wild!'', items: { /* ... */ } } });

Puedes probarlo en JSFiddle para ver cómo funciona en la práctica.

Descargo de responsabilidad adicional: esta respuesta es de alta votación debido a la siguiente discusión sobre meta. Por lo tanto, tenga en cuenta el "metaefecto". Los votos altos aquí no necesariamente significan que Jsonix es bueno, aplicable o recomendado por la comunidad. No se deje engañar por los votos altos.