javascript parseFromString更改xml文档中元素的顺序

javascript parseFromString更改xml文档中元素的顺序,javascript,xml,dom,Javascript,Xml,Dom,在我的系统中,我必须将一个大型javascript ajax系统移动到seam。我通过添加 xml = (new DOMParser()).parseFromString(s, "text/xml"); 现在我的问题是,我刚刚注意到domparser出于某种原因改变了xml元素的顺序。我缩小了范围,一定是这个。由于这些元素在离开服务器时是按特定顺序排序的,因此dom解析器重组不是一件好事。有人看到这个吗?有人知道如何修复吗?如果是这样的话,我会非常惊讶。节点顺序在XML中被定义为重要的,我不相

在我的系统中,我必须将一个大型javascript ajax系统移动到seam。我通过添加

xml = (new DOMParser()).parseFromString(s, "text/xml");

现在我的问题是,我刚刚注意到domparser出于某种原因改变了xml元素的顺序。我缩小了范围,一定是这个。由于这些元素在离开服务器时是按特定顺序排序的,因此dom解析器重组不是一件好事。有人看到这个吗?有人知道如何修复吗?

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

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

我在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);
var-sXML=”“;
var dpParser=new DOMParser();
var xdDoc=dpParser.parseFromString(sXML,“text/xml”);
var xsSerialize=新的XMLSerializer();
var sNewXML=xsSerialize.serializeToString(xdDoc);
警报(“原始XML:\n”+sXML+”\n\n新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的bug报告,他们已经“按设计”解决了这个问题

如果在IE 9中使用DOMParser.parseFromString函数时希望XML属性按一定顺序排列,那么您将希望显式地获取属性,而不是简单地对其进行迭代

以下是错误报告:

我在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);
var-sXML=”“;
var dpParser=new DOMParser();
var xdDoc=dpParser.parseFromString(sXML,“text/xml”);
var xsSerialize=新的XMLSerializer();
var sNewXML=xsSerialize.serializeToString(xdDoc);
警报(“原始XML:\n”+sXML+”\n\n新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的bug报告,他们已经“按设计”解决了这个问题

如果在IE 9中使用DOMParser.parseFromString函数时希望XML属性按一定顺序排列,那么您将希望显式地获取属性,而不是简单地对其进行迭代

以下是错误报告:

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


感谢仍然有这个问题的人,我通过编写自己的XML解析器解决了这个问题。我一起停止使用DomParser,从那时起,我改用json,它根本没有问题


谢谢

我已经有了,这很奇怪。当它在ajax模式下,jquery返回一个xmlresponse对象时,这很完美。但是在seam模式下,我必须将它解析为dom文档,当我以不同的顺序取出文档时。在这两种情况下,服务器发送完全相同的xml作为响应。我用两种不同的方式验证了它。有没有可以发布的测试页面?我已经有了,这很奇怪。当它在ajax模式下,jquery返回一个xmlresponse对象时,这很完美。但是在seam模式下,我必须将它解析为dom文档,当我以不同的顺序将文档输出时。在这两种情况下,服务器都会发送与响应完全相同的xml。我验证了这有两种不同的方式。你可以发布一个测试页面吗?是DOMParser重新排序你的xml,还是XmlSerializer?链接可以工作,但你需要注册Microsoft Connect,他们让你在看到任何错误之前填写一个简短的调查……是DOMParser重新排序属性(为了确保这一点,我在调试模式下进行了一步-使用索引迭代属性集合也会显示这一点)是的,我已经登录,仍然无法工作:)这里是一个屏幕截图:可能与您的登录有关?我不知道需要这么多步骤…我使用我父亲的帐户登录,我收到了您描述的错误。我必须实际加入Internet Explorer反馈程序(主页,单击“浏览”以查找当前接受错误的产品)在我看到bug之前填写了调查。是DOMParser对xml进行了重新排序,还是XmlSerializer?链接正常,但您需要注册Microsoft Connect,他们会让您在看到bug之前填写一份简短的调查……是DOMParser对属性进行了重新排序(为了确保这一点,我在调试模式下进行了一步-使用索引迭代属性集合也会显示这一点)是的,我已经登录,仍然无法工作:)这是一个屏幕截图:可能与您的登录有关?我不知道需要这么多步骤…我使用我父亲的帐户登录,我收到了您描述的错误。我必须实际加入Internet Explorer反馈程序(主页,单击“浏览”以查找当前的产品