2

这个答案简要地谈到了这个话题,但没有提到我遇到的问题。

看看这个小提琴

正如您从警报消息中看到的那样,jQuery 进行了许多我没有预料到的更改:

  • 将原件折叠<node></node>成一个自闭合标签 ( <node />)
  • $('<SelfClosingNode />')变成了<selfclosingnode xmlns="http://www.w3.org/1999/xhtml"></selfclosingnode>,例如。使标签名称小写,添加 xmlns 属性,并将其拆分为开始和结束标签

我需要能够插入 EXACT xml,我不想让 jQuery 弄乱我的标记结构!

在此先感谢您的帮助...

4

1 回答 1

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

于 2012-11-21T01:09:20.550 回答