如何在IE 10/11中可靠地将XML转换为String?

时间:2015-03-01 21:37:38

标签: javascript jquery internet-explorer-10 internet-explorer-11

在使用jQuery解析XML并转换回字符串时,IE 10和IE 11未正确保留命名空间。除了编写我自己的字符串代码之外,还有另一种可以在IE 10/11中执行此操作的方法吗?

这是我正在使用的代码,我也做了一个小提琴:http://jsfiddle.net/kd2tvb4v/2/

var origXml = 
    '<styleSheet' 
        + ' xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"'
        + ' xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"'
        + ' xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"'
        + ' mc:Ignorable="x14ac">'
            + '<fonts count="0" x14ac:knownFonts="1"></fonts>'
        + '</styleSheet>';
var xml = $($.parseXML(origXml).documentElement);
var reprocessedXml = (new XMLSerializer()).serializeToString(xml[0]);

$('#origXml').text(origXml);
$('#reprocessedXml').text(reprocessedXml);

1 个答案:

答案 0 :(得分:2)

所以,我想 xml[0].outerHTML可以胜任这项工作。奇怪的是,这在FF中可以正常工作,但xml[0].outerHTMLxml[0].innerHTML在IE中都是undefined。怪异!

outerHTML不可用时获取.html()的经典技巧似乎仍然适用于这种情况:将节点附加到虚拟元素并使用//...your original code... var xml = $($.parseXML(origXml).documentElement); var rootChildXml=$('<root />').append(xml).html(); console.log(origXML,rootChildXml); 。这似乎重新排列了属性的排序(它按字母顺序排列),但一切都被保留了下来:

在IE11中测试过,不要使用IE10:

<styleSheet xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" 
 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
 mc:Ignorable="x14ac">
<fonts count="0" x14ac:knownFonts="1"></fonts></styleSheet>

原始XML:

<stylesheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 
 mc:Ignorable="x14ac" 
 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<fonts x14ac:knownFonts="1" count="0"></fonts></stylesheet>

rootChildXml:

{{1}}

小提琴: http://jsfiddle.net/kd2tvb4v/4/