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

Posted

技术标签:

【中文标题】如何以跨浏览器的方式使用 JavaScript 将 DOM 序列化为 XML 文本?【英文标题】:How do I serialize a DOM to XML text, using JavaScript, in a cross browser way? 【发布时间】:2010-09-07 19:00:28 【问题描述】:

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

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

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

(来自rosettacode)

但是如何在 IE6 和其他浏览器中做到这一点(当然,没有破坏 Firefox)?

【问题讨论】:

【参考方案1】:

您可以在 Internet exlporer 中使用 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;

找到它here。

【讨论】:

谢谢...经过两天的搜索,我终于找到了这个。 (我花了一段时间才意识到 .xml 根本不适用于 FF/Chrome,我以为我做错了什么。) Webkit 当前有一个错误(例如在 Chrome 19 中)并且不会返回正确的 XML:xmlNode = document.createElement('img'); xmlNode.src = "test.png" xmlNode.alt = "test" (new XMLSerializer()).serializeToString(xmlNode);返回:“" @cburgmer 不是 xml 节点 @Esailija 我不明白,那是什么?我希望 XMLSerializer 将 xmlNode 序列化为 (注意尾部斜杠) @cburgmer 这是一个 html 节点,您使用 html 文档创建了它。 XML 节点没有像.src 这样的属性。看看实际的 xml 元素有什么:console.dir( document.implementation.createDocument( null, "xml", null ).createElement("img") )

以上是关于如何以跨浏览器的方式使用 JavaScript 将 DOM 序列化为 XML 文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vanilla JavaScript 查找 div 的宽度?

以跨浏览器的方式查找视口的确切高度和宽度(无 Prototype/jQuery)

如何找出按下的字符键?

eventUtil的详解,来处javascript 高级程序设计

在 Javascript 中检测图像 404

在 DOM 元素的样式对象更改后,您可以使用 javascript 钩子触发器吗?