This answer简要介绍了这个话题,但没有提到我遇到的问题。
看看this fiddle。
从警报消息中可以看出,jQuery做了一些我没想到的更改:
<node></node>
折叠为自动结束标记(<node />
)$('<SelfClosingNode />')
成为<selfclosingnode xmlns="http://www.w3.org/1999/xhtml"></selfclosingnode>
,例如。使标记名称为小写,添加了xmlns属性,并将其拆分为开始和结束标记我需要能够插入EXACT xml,i.o.w。我不希望jQuery弄乱我的标记结构!
提前感谢您的帮助...
答案 0 :(得分:1)
好消息是,您可以强制SelfClosingNode
的区分大小写。见下文:
var xml_string = $("#xml-data").html();
try{
var xml = $.parseXML(xml_string);
var $xml = $(xml);
var newStuff = $.parseXML("<SelfClosingNode />");
var $newStuff = $(newStuff.documentElement);
$xml.find("project").append($newStuff);
console.log(xml.documentElement);
// Needed if you are running in IE
if (window.ActiveXObject) {
var new_xml_string = xml.xml;
} else {
var new_xml_string = (new XMLSerializer()).serializeToString(xml);
}
alert( new_xml_string );
} catch(e){
alert(e);
}
不幸的是,正是XMLSerializer强制使用自闭项标记,而不是JQuery。自闭标签被认为对XML有效,但对XHTML无效。如果您查看控制台日志输出(请参阅上面的console.log
语句),您可以看到标签实际上并未在DOM中自动关闭。
一种快速而又肮脏的方法是将<node></node>
更改为<node><!-- comment --></node>
。
否则,您的外部程序可能必须更灵活地读取这些自动关闭标记,因为它们是有效的XML。关于替换现有XML中的自闭标签存在一些问题,例如: Replace XML self-closing tag with empty one