xml2js read parser parse online javascript json node.js xml-parsing xml-namespaces

javascript - read - xml parser online



XML to JSON: se trata de espacios de nombres y alias xml en JavaScript (3)

El documento que cita no tiene nada que ver con xml2js, pero puede obtener el mismo patrón si lo desea. Tendría que cambiar el código fuente de xml2js o repetir el proceso de renombrar todo después de cargarlo, las cuales no son buenas ideas (la primera significa que no podrá actualizar tan fácilmente, y ambas agregarán sobrecarga a su código) , por lo que probablemente debería apegarse a la sintaxis [''d: name'']. La única desventaja es que agrega 3 caracteres a cada búsqueda, pero si su servidor usa gzip, no hará una diferencia en el mundo real.

Si realmente quieres, esta función cambiará el nombre de todo:

function colonToDollar(obj){ var r={}; for(var k in obj){ r[k.replace(/:/g,''$'')] = (typeof obj[k]===''object'') ? colonToDollar(obj[k]) : obj[k]; } return r; }

Estoy intentando convertir XML a JSON en node.js usando el módulo xml2js. ¿Cómo manejo el alias del espacio de nombres al acceder a las variables?

El siguiente código convierte mi archivo (sampleWithNamespaces.xml)

var fs = require(''fs''), xml2js = require(''xml2js''); var parser = new xml2js.Parser(); fs.readFile(''sampleWithNamespaces.xml'', function (err, data) { parser.parseString(data, function (err, result) { console.dir(result); console.log(''Done''); }); });

sampleWithNamespaces.xml:

<d:student xmlns:d=''http://www.develop.com/student''> <d:id>3235329</d:id> <d:name>Jeff Smith</d:name> <d:language>JavaScript</d:language> <d:rating>9.5</d:rating> </d:student>

Salida:

$ node xml2jsTest.js { ''@'': { ''xmlns:d'': ''http://www.develop.com/student'' }, ''d:id'': ''3235329'', ''d:name'': ''Jeff Smith'', ''d:language'': ''JavaScript'', ''d:rating'': ''9.5'' } Done

Puedo acceder al atributo ''nombre'' usando el result[''d:name''] la notación result[''d:name''] lugar de result.name si no tengo el alias del espacio de nombres. Supongo que mi pregunta es, ¿estoy haciendo esto de la manera correcta?

He leído que "Si un elemento tiene un alias de espacio de nombre, el alias y el elemento se concatenan usando" $ ". Por ejemplo, ns: el elemento se convierte en ns $ elemento" Si hago esto, puedo leer el atributo como result.d$name . Si fuera por esta ruta, ¿cómo iba a hacerlo?


si usa node y xml2js use result["ns:entry"] para referirse a una entrada específica


Tuve un problema similar. La mayoría de mis etiquetas XML estaban en un solo espacio de nombres. Así que decidí eliminar todos los espacios de nombres de mi XML.

Es posible eliminar espacios de nombres al analizar XML al agregar un tagNameProcessors a xml2js .

var parseString = require(''xml2js'').parseString; var stripNS = require(''xml2js'').processors.stripPrefix; parseString(xml_str, { tagNameProcessors: [stripNS] },function(err, result) {});

Esto técnicamente ignorará todo el espacio de nombres. Si tiene etiquetas XML de varios espacios de nombres, puede que esto no sea de gran utilidad.