Pregunta

Tengo el siguiente código donde yo estoy tratando de conseguir el directorio c: nodos de creación:

 value = '<?xml version="1.0" encoding="UTF-8"?><content><c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate></content>';

 xml = (new DOMParser()).parseFromString(value, 'text/xml');

 console.log(xml.getElementsByTagName('c:CreationDate'));

Por desgracia, es devolver una matriz vacía, en lugar de una matriz con el nodo que está en el xml. Creo que esto es causado debido a la ":". Símbolo

¿Hay una manera de escapar de ella?

Nota: Por favor, no sugieren el uso de childNodes o cosas como esta. Esto no va a funcionar para mí ya que mi xml es verificar compleja (aquí es sólo una muestra) y lo más probable es el cambio en el futuro y que sólo puede basarse en el nombre de la etiqueta.

Gracias!

¿Fue útil?

Solución

El c en c:CreationDate denota una XML espacio de nombres prefijo. El prefijo de espacio sólo es un acceso directo para el espacio de nombres. El espacio de nombres tiene que ser definido en alguna parte en el documento con un atributo xmlns:c. Sin embargo, en el documento de la definición de espacio de nombres no se encuentra.

Así que debe ser similar:

var value = '<?xml version="1.0" encoding="UTF-8"?>' +
            '<content>' +
            '  <c:CreationDate xmlns:c="http://my.namespace">2010-09-04T05:04:53Z</c:CreationDate>' +
            '</content>';

o

var value = '<?xml version="1.0" encoding="UTF-8"?>' +
            '<content xmlns:c="http://my.namespace">' +
            '  <c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate>' +
            '</content>';

En este ejemplo el c prefijo se asigna a la http://my.namespace espacio de nombres. La etiqueta CreationDate tiene el prefijo c, por lo que pertenece a la http://my.namespace espacio de nombres.

A continuación, puede utilizar la función getElementsByTagNameNS() conscientes espacio de nombres de consulta para el elemento de creación:

console.log(xml.getElementsByTagNameNS('http://my.namespace', 'CreationDate'));

A medida que el primer parámetro que tiene que pasar el nombre de espacio de nombres reales y no el prefijo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top