JavaScript XML Parser: Как получить узлы, которые имеют «:» в названии
-
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'));
В качестве первого параметра вы должны пройти настоящее имя пространства имен, а не префикс.