如何将带有ns前缀的元素附加到另一个元素并使其从文档继承namespaceURI映射?
作为示例:实例化解析XML字符串的文档:pp:q
元素从namespaceURI == 'abc'
元素继承root
,但向{{1}追加新元素pp:q
}},新元素有root
namespaceURI == null
此示例使用doc = new DOMParser().parseFromString(
'<root xmlns:pp="abc">'
+'<pp:q/>'
+'<q/>'
+'</root>'
,'text/xml');
root = doc.firstChild;
x = root.getElementsByTagName("pp:q").item(0);
console.log(x.namespaceURI); // logs abc
y = doc.createElement('pp:q')
root.appendChild(y)
console.log(y.namespaceURI); //logs null
library
nodejs
中投放
[以下编辑回应kjhughes]
我也试过了xmldom
,但我也觉得这样做有些不对劲。
将这些行附加到代码中:
createElementNS
答案 0 :(得分:0)
根据document.createElement()的文档,
var element = document.createElement(tagName);
元素是创建的元素对象。
tagName 是一个字符串 指定要创建的元素的类型。的nodeName 使用tagName的值初始化created元素。 不要使用 使用此方法的限定名称(如“html:a”) 。
您应该使用document.createElementNS()。
每个问题更新更新:
请注意命名空间本身是重要的,而不是命名空间前缀。当您为给定命名空间提供多个前缀时,API没有义务使用特定的命名空间前缀。此外,请注意.namespaceURI
是名称空间,不 名称空间前缀。
答案 1 :(得分:0)
您感到困惑,因为您使用console.log(String(doc));
输出XML。请改用XML序列化程序:console.log((new XMLSerializer()).serializeToString(doc));
要记住的其他要点
createElementNS()
。text/xml
,这会导致严重的编码问题,并且已弃用。使用application/xml
- 或者在这种情况下application/xhtml+xml
- 而不是。