的Javascript的XML解析器:如何获取具有节点“:”在名称

问题描述:

我有下面的代码在那里我试图让C:CreationDate节点:的Javascript的XML解析器:如何获取具有节点“:”在名称

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验证复杂(这里仅仅是一个示例),将来很可能会改变,我只能依赖标签名称。

谢谢!

c in c:CreationDate表示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')); 

至于你必须通过真正的命名空间的名称,而不是前缀的第一个参数。