从浏览器 DOM 序列化 XML 不会创建 XML 声明

Tim*_*ner 5 javascript xml dom

好的,所以我们有一个通过 XML 与网络服务通信的网络应用程序。

到目前为止,我们只是通过将字符串组合在一起(并通过 XMLHttpRequest/POST 发送)来组装这些 XML。我想重新考虑使用构建和序列化浏览器中内置的 XML DOM 树的工具,即 document.implementation & XMLSerializer().serializeToString(doc) (请参阅此处此处的Mozilla 文档)。到目前为止,它一直工作正常,只是结果字符串不包含 XML 声明。

那么,这应该如何运作?有什么好的建议和/或阅读吗?

哦,是的,我发现了这个描述问题的 mozilla 错误和一个骇人听闻的解决方法(链接的线程可通过archive.org 获得)。

Mic*_*ser 1

不同的浏览器在输出 xml 声明方面有不同的行为。

这是我的经验:

  • Mac 上的 Opera 12.15 -- XML 声明
  • Mac 上的 Safari 6.0——无声明
  • Mac 上的 Chrome 26.0——无声明
  • Mac 上的 Firefox 21.0——无声明

不知道 IE 是做什么的。另一个值得注意的观察是,似乎没有 API(我发现)可以关闭 Opera 中的声明。因此,我会找到一种比您指出的更好的“黑客”方法,它可以识别 XML 声明是否已经存在。也许基于字符串的快速检查序列化形式是否包含声明就足够了(例如,if (serialized.slice(0, 21) == "<?xml version=\"1.0\"?>") ...尽管这不是一个很好的检查方法/我会考虑替代方案)。