var d = new DOMParser().parseFromString(
"<root><x><y></y></x></root>",
"text/xml"
);
// Prove it's a deep clone by removing `y` from `x`:
console.log("d before", d.documentElement.firstChild.children.length);
var x = d.documentElement.firstChild;
var d2 = d.cloneNode(true);
x.removeChild(x.firstChild);
console.log("d after", d.documentElement.firstChild.children.length);
console.log("d2 after", d2.documentElement.firstChild.children.length);
cloneXML=function(xml) {
var str = (new XMLSerializer()).serializeToString(xml.getRootNode())
return new window.DOMParser().parseFromString(str, "text/xml")
};
2条答案
按热度按时间8tntrjer1#
使用
cloneNode(true)
,Document
继承自Node
:范例:
尤金Ryabtsev指出,这不会从序言中克隆信息,这是一个很好的观点。
在撰写本文时,prolog信息包括:
standalone
标志其中,只有
standalone
标志是相关的。在撰写本文时,版本始终是1.0(即使在序言中给予不同的1.x
值,它也会按照规范作为XML 1.0文档处理);编码也不相关,因为我们处理的是内存中的文档,而不是我们从字节反序列化的文本。但是独立标志确实没有被
cloneNode
复制(至少在Chrome上没有)。如果还想复制独立标志,请添加:在
cloneNode
之后。oxf4rvwz2#
比你想象的要容易。只需使用Serializer和DOMParser。