在使用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);
答案 0 :(得分:2)
所以,我想
xml[0].outerHTML
可以胜任这项工作。奇怪的是,这在FF中可以正常工作,但xml[0].outerHTML
和xml[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}}