防止jQuery操纵动态插入的XML字符串

时间:2012-11-20 18:10:49

标签: javascript jquery xml parsexml

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弄乱我的标记结构!

提前感谢您的帮助...

1 个答案:

答案 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