Javascript XML解析器:如何获取节点名称中包含“:”的节点

3
我有以下代码,我想获取c:CreationDate节点:
 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中的节点的数组。我认为这是因为“:”符号造成的。

有没有办法对其进行转义?

注意:请不要建议使用childNodes或类似的东西。这对我来说行不通,因为我的xml非常复杂(这里只是一个示例),并且将来很可能会发生变化,我只能依靠标记名称。

谢谢!

1个回答

12

c:CreationDate 中的 c 表示 XML namespace 前缀。命名空间前缀只是命名空间的一个快捷方式。命名空间必须在文档中通过 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.namespaceCreationDate标签带有前缀c,因此它属于命名空间http://my.namespace
然后,您可以使用支持命名空间的getElementsByTagNameNS()函数查询CreationDate元素:
console.log(xml.getElementsByTagNameNS('http://my.namespace', 'CreationDate'));

作为第一个参数,您必须传递真实的命名空间名称而不是前缀。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接