Este es mi XML
<?xml version="1.0" encoding="UTF-8"?> <message> <return> <BYTES_LENGTH>12019</BYTES_LENGTH> <STATUS>DONE</STATUS> </return> <return> <BYTES_LENGTH>1129</BYTES_LENGTH> <STATUS>DONE</STATUS> <ERROR_CODE>NO MESSAGE FOUND</ERROR_CODE> </return> </message>Estoy escribiendo una lógica en Node JS usando la biblioteca xml2js-xpath para extraer los valores ERROR_CODES y STATUS en una matriz usando el siguiente código:
var xml2js = require("xml2js") const parserXml = new xml2js.Parser(); var val = []; parserXml.parseString(data, (err, result) => { STATUS = xpath.find(result, '//STATUS'); ERRORS = xpath.find(result, '//ERROR_CODE'); val.push(STATUS); val.push(ERRORS); }Resultado Esperado:
[ [ 'DONE', 'DONE' ], [ '', 'NO MESSAGE FOUND' ] ]Pero estoy recibiendo esto en su lugar
[ [ 'DONE', 'DONE' ], [ 'NO MESSAGE FOUND' ] ]¿Cómo puedo arreglar esto para incluir un valor en blanco si el elemento no existe en el nodo XML? ¿Debería usar una biblioteca diferente? ¿Cuál es la mejor manera de manejar esto?
Con XPath 3.1 (p. ej., SaxonJS), puede usar XPath
array { array { /message/return/string(STATUS) }, array { /message/return/string(ERROR_CODE) } }p.ej
const SaxonJS = require("saxon-js"); const xml = `<?xml version="1.0" encoding="UTF-8"?> <message> <return> <BYTES_LENGTH>12019</BYTES_LENGTH> <STATUS>DONE</STATUS> </return> <return> <BYTES_LENGTH>1129</BYTES_LENGTH> <STATUS>DONE</STATUS> <ERROR_CODE>NO MESSAGE FOUND</ERROR_CODE> </return> </message>`; const result = SaxonJS.XPath.evaluate(`parse-xml(.) ! array { array { /message/return/string(STATUS) }, array { /message/return/string(ERROR_CODE) } }`, xml); console.log(result);