Cómo obtener los Atributos XML con XPath en JSDOM
No puedo parecer poder obtener Atributos XML utilizando JSDOM y la sintaxis XPath en este fragmento de código XML.
Por mi entendimiento, PARAGRAPH/DATE/@ISO
es una sintaxis XPath válida para el atributo y funciona perfectamente en sitios como Xpather.
Ejemplo mínimo de trabajo:
import { JSDOM } from "jsdom";
const xml = `
<paragraph>
This is a text, about something, that happened on
<date iso="20131117">17.November 2013</date>
. It is a very important date.
</paragraph>
`;
const dom = new JSDOM(xml, {contentType: "application/xml"});
const doc = dom.window.document;
// 2: XPathResult.STRING_TYPE
const date = doc.evaluate("PARAGRAPH/DATE/@ISO", doc, null, 2, null).stringValue;
console.log(date);
Resultado esperado: "20131117"
Resultado actual: ""
Otros enfoques que no funcionan:
PARAGRAPH//DATE/@ISO
,
string(PARAGRAPH/DATE/@ISO)
, XPath.FIRST_ORDERED_NODE_TYPE
La evaluación parece volver vacía.
davy.ai
Hay un par de cosas que podrían estar causando el problema aquí.
En primer lugar, JSDOM podría no estar analizando el XML correctamente. Esto podría deberse al hecho de que el fragmento de XML no está bien formado (no tiene un elemento raíz), o podría deberse a que JSDOM no puede manejar ciertas construcciones XML.
Para probar esto, puede intentar agregar un elemento raíz al fragmento de XML y ver si JSDOM puede analizarlo correctamente:
Y luego modificar el código JS en consecuencia:
Si esto funciona, entonces el problema estaba con el XML que no estaba bien formado.
Si esto no funciona, es posible que JSDOM no pueda manejar ciertas construcciones XML. En este caso, es posible que necesite cambiar a una biblioteca de análisis XML diferente, o extraer manualmente el atributo usando expresiones regulares o manipulación de cadenas.