从Browser DOM序列化XML不会创建XML声明

时间:2011-09-24 19:13:06

标签: javascript xml dom

好的,我们有一个通过XML与Web服务通信的webapp。

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

那么,该怎么办呢?有什么好的建议和/或阅读吗?

哦,是的,我发现this mozilla错误描述了这个问题,并且有一个hacky解决方法(链接的线程可以通过archive.org获得)。

1 个答案:

答案 0 :(得分:1)

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

以下是我的经历:

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

不确定IE的用途。另一个值得注意的观察是,似乎没有API(我已经找到)关闭Opera中的声明。结果,我发现一个更好的'hack'而不是你所指出的那个,知道XML声明是否已经存在。如果序列化表单包含声明,也许是一个快速的基于字符串的检查就足够了(例如if (serialized.slice(0, 21) == "<?xml version=\"1.0\"?>") ...虽然这不是检查/我考虑替代方案的好方法。)