2012-05-12 150 views
0

我很努力地找出如何在JavaScript中建立一个全新的DOM文档,将它添加并从我已经存在的DOM节点列表中加载它有。我发现的只是愚蠢的循环方式,但我很确定这样的架构有一个合适的API。但我找不到一个!Xml解析器/从XML节点列表创建XML DOM文档

+0

这是不是很清楚你想要做什么,但也许[cloneNode](https://developer.mozilla.org/En/DOM/Node.cloneNode)将是有用的。如果你想得到更好的帮助,我建议你准确地描述你真正想要完成的事情,而不是你想要什么样的解决方案,但是你实际上想要做什么。 – jfriend00

+0

你好, 我从我的PHP服务收到一个完整的xml文件,我用getElementsByTagName()方法检索它的一部分。由于标签名称非常精确,所以生成的节点列表恰恰包含我需要传递给给定方法的内容。但该方法接受xmldocuments,因此我试图将此节点列表转换为包含节点列表节点的文档。 ClodeNode不返回domdocument类型,但感谢提示。 – Sebas

回答

-1

尝试这样:

// Define a base XML document. 
var xmlString = "<root>" + 
    "<node id='1'>One</node>" + 
    "<node id='2'>Two</node>" + 
    "<node id='3'>Three</node>" + 
    "<node id='4'>Four</node>" + 
    "</root>"; 

// Use jQuery to parse it to a DOM document in a cross-browser fashion. 
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​var xmlDoc = $.parseXML(xmlString); 

// Grab some elements that we will write to a new document. 
var node1 = xmlDoc.getElementById("1"); 
var node3 = xmlDoc.getElementById("3"); 

// Use jQuery to create the new document, then get a reference 
// to the root element. 
var newXmlDoc = $.parseXML("<newRoot></newRoot>"); 
var newRoot = newXmlDoc.getElementsByTagName("newRoot")[0]; 

// Clone the two elements into the new document. 
newRoot.appendChild(node1.cloneNode(true)); 
newRoot.appendChild(node3.cloneNode(true)); 

// This will write out the text content of the two nodes 
// we have cloned into the new document. 
// Should write: "OneThree". 
document.write(newXmlDoc.documentElement.textContent); 

下面是的jsfiddle运行代码:http://jsfiddle.net/sajaraki/JnSzK/

它使用JavaScript的XML DOM实现的组合,以及jQuery来绕过参与浏览器不兼容加载和创建XML文档。

+0

嗨, 感谢您的努力,这确实是唯一的解决方案,即使我不太喜欢循环的想法... – Sebas

+1

这个问题被标记为'JavaScript' - '使用这个标签的问题有关ECMAScript及其方言/实现(不包括ActionScript)。除非还包括框架/库的标签,否则预计会有纯粹的JavaScript答案。# – Greg

+0

对您有帮助!提问者似乎并不介意...... –