在 JavaScript 中将 DOM 节点或文档转换为 XML

Sta*_*ale 4 javascript svg dom

假设您在 JavaScript 中收到一个 DOM 元素或文档(例如 window.document),您如何将其转换为有效的 XML?

更具体地说,对于我的示例,我有一个显示 SVG 的网页,该 SVG 有大量 JavaScript 来允许交互。它是一种图形显示,可让您放大图形,甚至进行一些转换。现在,用户希望有一个“保存图像”按钮。我想象的方法是获取 SVG 元素的文档节点,并将其转换为 XML,然后将其发送到服务器,然后服务器返回包含 SVG 文档或 PNG 图像的页面。

这一切都在 FireFox 上运行(目前这是用户的要求,尽管它在 Safari 和 Chrome 中也能正常工作)。在网页中的 Firefox 中,我已将 SVG 文档作为对象元素包含在内。在 javascript 中,我可以访问该对象 contentDocument,它引用 XML 页面的根。它包含 XML 版本、文档标签和具有所有属性的根 svg 标签。

也许有人已经解决了这个问题,所以我可以复制他们的代码。也许有人知道在萤火虫中去哪里寻找来实现这一点。或者也许已经有 DOM 方法用于此目的。

Ser*_*sky 5

有一个非标准 API 对象:XMLSerializer(尽管它在除 IE 浏览器之外的所有浏览器中都实现了,但它不是标准的)。

它的serializeToString方法需要传递DOMNode对象。

var sXML = new XMLSerializer().serializeToString(document.body);
Run Code Online (Sandbox Code Playgroud)

在 Internet Explorer 中,无法检索 HTML 的正确 XML,除非获取 .outerHTML 并修复序列化为 HTML 时出现的所有问题(例如属性中缺少引号、未闭合标签等)