JavaScript XML解析器:如何获得名称中具有“:”的节点
-
28-09-2019 - |
题
我有以下代码,我正在尝试获取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中的节点的数组。我认为这是由于“:”符号而引起的。
有没有办法逃脱它?
注意:请不要建议使用儿童或这样的东西。由于我的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()
函数以查询创建元素:
console.log(xml.getElementsByTagNameNS('http://my.namespace', 'CreationDate'));
作为第一个参数,您必须传递真实名称空间名称,而不是前缀。
不隶属于 StackOverflow