如何使用JavaScript以跨浏览器的方式将DOM序列化为XML文本?

28

我有一个XML对象(使用XMLHTTPRequestresponseXML加载)。我已经使用jQuery修改了这个对象,并希望将其存储为字符串。

显然在Firefox等浏览器中有一种简单的方法:

var xmlString = new XMLSerializer().serializeToString( doc );

(来自 rosettacode )

但是怎样在IE6和其他浏览器中实现它呢(当然不能破坏Firefox)?

1个回答

35

您可以在Internet Explorer中使用doc.xml。

您将会得到类似于以下内容:

function xml2Str(xmlNode) {
   try {
      // Gecko- and Webkit-based browsers (Firefox, Chrome), Opera.
      return (new XMLSerializer()).serializeToString(xmlNode);
  }
  catch (e) {
     try {
        // Internet Explorer.
        return xmlNode.xml;
     }
     catch (e) {  
        //Other browsers without XML Serializer
        alert('Xmlserializer not supported');
     }
   }
   return false;
}

Found it here.


谢谢... 经过两天的搜索,我终于找到了这个。 (我花了一些时间才意识到对于FF / Chrome而言.xml根本不在那里,我以为我做错了什么。) - Marcel Popescu
Webkit目前存在一个bug(例如在Chrome 19中),将无法返回正确的XML:xmlNode = document.createElement('img'); xmlNode.src = "test.png" xmlNode.alt = "test" (new XMLSerializer()).serializeToString(xmlNode);返回: "<img src="test.png" alt="test">" - cburgmer
@cburgmer 这不是一个 XML 节点。 - Esailija
@Esailija,我不明白,那是什么意思?我期望XMLSerializer将xmlNode序列化为<img src .../>(注意末尾的斜杠)。 - cburgmer
@cburgmer 这是一个HTML节点,您是使用HTML文档创建的。XML节点没有像.src这样的属性。请查看实际的XML元素,使用以下代码:console.dir( document.implementation.createDocument( null, "xml", null ).createElement("img") ) - Esailija

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接