JavaScript XML Parser: Как получить узлы, которые имеют «:» в названии

StackOverflow https://stackoverflow.com/questions/4288232

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть следующий код, в котором я пытаюсь получить узлы C: Treethddate:

 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'));

К сожалению, он возвращает пустой массив вместо массива с узлом, который находится в XML. Я думаю, что это вызвано из-за символа ":".

Есть ли способ избежать этого?

Примечание: пожалуйста, не предлагайте использовать по добычам или подобным вещам. Это не будет работать для меня, так как мой XML подтверждает комплекс (вот просто образец) и, скорее всего, изменятся в будущем, и я могу только полагаться в название тега.

Спасибо!

Это было полезно?

Решение

То c в c:CreationDate Обозначает Ань Пространство имен XML префикс. Префикс пространства имен - это только ярлык для пространства имен. Пространство имен должно быть определено где-то в документе с xmlns:c атрибут. Но в вашем документе определение пространства имен отсутствует.

Так что это должно выглядеть:

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>';

или

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>';

В этом примере префикс c назначается пространству имен http://my.namespace. Отказ То CreationDate Тег префикс с c, Так что это принадлежит к пространству имен http://my.namespace.

Тогда вы можете использовать пространство имен getElementsByTagNameNS() Функция для запроса для элемента GreateStaTate:

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

В качестве первого параметра вы должны пройти настоящее имя пространства имен, а не префикс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top