javascript parseFromString更改xml doc中元素的顺序

时间:2010-12-14 23:01:03

标签: javascript xml dom

在我的系统中,我不得不将一个大的javascript ajax系统移动到接缝。我通过添加

来正常工作
xml = (new DOMParser()).parseFromString(s, "text/xml");

现在我的问题是我刚刚注意到domparser由于某种原因改变了xml元素的顺序。我把它缩小了,它必须是这样。因为这些元素在离开服务器时按特定顺序排序,所以dom解析器重组不是一件好事。谁看过这个?有谁知道如何解决它?

3 个答案:

答案 0 :(得分:1)

我在IE 9 RC 1标准模式中试图解决另一个问题(XMLHttpRequest对象返回MSXML ActiveX对象,即使在标准模式下也是如此。功能检测看到DOMParser并且这两个文档不兼容所以我认为使用DOMParser可以做到这一点)

在IE 9 RC 1中重现问题的示例代码:

var sXML = "<TEST ID=\"124\" TITLE=\"TitleValue\" DATE=\"2011-02-24T00:00:00\" STATUS=\"Processing\" EMPNAME=\"Smith, Sam\" STATUSCODE=\"P\" ROWNUM=\"1\" />";

var dpParser = new DOMParser();
var xdDoc = dpParser.parseFromString(sXML, "text/xml");

var xsSerialize = new XMLSerializer();
var sNewXML = xsSerialize.serializeToString(xdDoc);

alert("Original XML:\n" + sXML + "\n\nNew XML:\n" + sNewXML);

警报的输出......

原始XML:

<TEST ID="124" TITLE="TitleValue" DATE="2011-02-24T00:00:00" STATUS="Processing" EMPNAME="Smith, Sam" STATUSCODE="P" ROWNUM="1" />

新XML:

<TEST ROWNUM="1" STATUSCODE="P" EMPNAME="Smith, Sam" STATUS="Processing" DATE="2011-02-24T00:00:00" TITLE="TitleValue" ID="124" />

更新:  我已经向微软提交了一份有关此问题的IE 9错误报告,他们已将其解析为“按设计”。

如果在IE 9中使用DOMParser.parseFromString函数时期望XML属性按特定顺序排列,则需要明确地获取属性,而不是简单地迭代它们。

以下是错误报告: https://connect.microsoft.com/IE/feedback/details/645091/domparser-parsefromstring-in-ie-9-rc-1-rearranges-the-attributes-of-the-xml-node-passed-in

答案 1 :(得分:0)

如果是这样的话,我会非常惊讶。节点顺序被定义为在XML中很重要,我无法相信任何浏览器的DomParser实现都不会尊重它。我建议你再看看你的代码。

答案 2 :(得分:0)

对于仍然遇到此问题的任何人,我通过编写自己的XML解析器来解决它。我一直停止使用DomParser,从那时起,我已经改为json,根本没有问题。

感谢