假设我们有以下XML:
<ns:xml xmlns:ns="AAA">
<predefined xmlns="AAA"/>
</ns:xml>
在浏览器中运行以下代码时:
const doc = new DOMParser().parseFromString(XML, 'text/xml');
const added = doc.createElementNS('AAA', 'added');
doc.documentElement.appendChild(added);
仅序列化added
返回<added xmlns="AAA"/>
但是当串行化doc
时,结果是
<ns:xml xmlns:ns="AAA">
<predefined xmlns="AAA"/>
<a:added />
</ns:xml>
为什么predefined
和added
表现不同?或者反过来问:如何使用createElementNS
(和其他DOMAPI(创建像predefined
这样的元素?
要使added
的行为与predefined
类似,需要将xmlns
属性显式设置为与namespaceURI
参数相同的命名空间:
const added = doc.createElementNS('AAA', 'added');
added.setAttribute('xmlns', 'AAA');
doc.documentElement.appendChild(added);
还要注意,使用mime类型text/html
解析它会改变(解析和(序列化的行为,从而导致以下结果:
<ns:xml xmlns:ns="AAA">
<predefined xmlns="AAA"></predefined>
<added xmlns="AAA"></added>
</ns:xml>