Javascript 如何获取XML文档的innerHTML(AJAX)?

Javascript 如何获取XML文档的innerHTML(AJAX)?,javascript,xml,ajax,Javascript,Xml,Ajax,AJAX查询之后,返回一个XML文件。我能够“解析”该文件,但当涉及到获取元素的“innerHTML”(或者在本例中是“innerXML”)时,问题就出现了 如果XML元素,比如说“content”,只包含我可以做的文本:content.childNodes[0].nodeValue(假设内容引用XML元素“content”)。但该元素包含其他元素: <stackoverflow reason="tribute to this page"> <content>

AJAX查询之后,返回一个XML文件。我能够“解析”该文件,但当涉及到获取元素的“innerHTML”(或者在本例中是“innerXML”)时,问题就出现了

如果XML元素,比如说“content”,只包含我可以做的文本:
content.childNodes[0].nodeValue
(假设内容引用XML元素“content”)。但该元素包含其他元素:

<stackoverflow reason="tribute to this page">
   <content>
      <div><span><p>Some more HTML elements</p></span></div>
   </content>
</stackoverflow>

更多的HTML元素

我需要
的内容复制到页面中现有的
,我该怎么做


例如,
myDiv.innerHTML=content.innerHTML

尝试将HTML放在CDATA标记中,如下所示:

<stackoverflow reason="tribute to this page">
   <content>
      <![CDATA[<div><span><p>Some more HTML elements</p></span></div>]]>
   </content>
</stackoverflow>

innerHTML
是一种你根本不应该使用的黑客。相反,请使用正常功能:

myDiv.appendChild(document.adoptNode(content));

您可以使用
cloneNode
appendChild

myDiv.appendChild(content.childNodes[0].cloneNode(true));

还可以使用XMLSerializer将xml节点转换回字符串表示形式,然后使用innerHTML将其复制到元素:

div.innerHTML = 
  (new XMLSerializer()).serializeToString(content.childNodes[0].nodeValue)

然而,phihag指出的解决方案看起来更安全。但是,我也没有进行测试,我也不确定浏览器的兼容性。

如果要使用innerHTML,下面介绍如何将第一个元素的XML标记转换为字符串

//Where oXML is the xml document or xml object
var XMLString;
oXML=oXML.getElementsByTagName('content')[0].firstChild;
//nodeType 1-Element,2-Attr,3-Text.....
while(oXML.nodeType!=1){oXML=oXML.nextSibling;}
//code for IE and Mozilla, Firefox, Opera, etc. respectively
XMLString=(oXML.xml)?oXML.xml:(new XMLSerializer()).serializeToString(oXML);
myDiv.innerHTML=XMLString;
那时候。。。用于查找内容标记中的第一个元素,跳过文本节点类型。
Firefox添加文本节点类型,当文本节点中没有文本时IE6不会添加。

+1,但请注意,Internet Explorer不支持
adoptNode()
importNode()
。幸运的是,它起作用了!但是,当我“复制”一个
bold
元素时,不会应用样式(文本不是粗体)。我知道
元素已被弃用…但它仍然应该工作…@JCOC611,的确如此,但它也在目标文档的上下文中创建了一个新元素,并在将其添加到文档树之前对该元素使用
innerHTML
)-1表示“innerHTML是一种您根本不应该使用的攻击”.
XMLSerializer
在8版之前(含8版)的IE中不受支持,但在其他方面得到了很好的支持。我也想知道。当我想在Android资源文件中存储XML文档时,有人建议我这样做。我认为这是一种合法的方法。然后可以通过
innerHTML
添加内容,这与大多数其他建议不同,是跨浏览器的。
//Where oXML is the xml document or xml object
var XMLString;
oXML=oXML.getElementsByTagName('content')[0].firstChild;
//nodeType 1-Element,2-Attr,3-Text.....
while(oXML.nodeType!=1){oXML=oXML.nextSibling;}
//code for IE and Mozilla, Firefox, Opera, etc. respectively
XMLString=(oXML.xml)?oXML.xml:(new XMLSerializer()).serializeToString(oXML);
myDiv.innerHTML=XMLString;