【问题标题】:Convert xml document back to string with jQuery使用 jQuery 将 xml 文档转换回字符串
【发布时间】:2014-03-25 22:28:28
【问题描述】:

我正在尝试解析 xml 格式的字符串,删除其中一个元素,然后将其写回字符串。全部带有标准的 jQuery 函数。这是我似乎无法弄清楚的最后一步。

var $xml = $(somexmlstring);
var element = $xml.find('name:contains("'+somevalue+'")');
element.remove();
var newxmlstring = $xml.dunno(); 

我可以使用什么函数将 $xml DOM 转换回字符串?

【问题讨论】:

    标签: javascript jquery xml


    【解决方案1】:

    为了帮助您修复 jsfiddle 中的代码:

    var data = '<value><url>foo</url><name>bar</name></value><value><url>foo</url><name>bar</name></value>'
    var xml = $.parseXML('<root>' + data + '</root>');
    var $xml = $(xml);
    console.log('xml', $xml.find('root').html());
    

    修复在最后一行:`$xml.find('root').html()

    【讨论】:

    • 这在 Internet Explorer 中不起作用。浏览器说innerHTML 没有.replace() 属性...
    • @AlexisWilke:这可能只是 jquery 和 IE 的问题,与答案中的代码无关
    • 我认为 XML 和 HTML 之间存在差异,html() 函数只需要 HTML...当我尝试这个时,我遇到了真正的 XML 文档(不仅仅是 HTML)的问题。可能是因为其中一个标签名为&lt;title&gt;,它不在名为&lt;head&gt;的标签内。
    • @AlexisWilke:我对 XML 和 HTML 之间的这种差异感到相当沮丧......确实使用了例如在 HTML 中不应该有子级但在 XML 中有子级的标签(为什么不) 确实在 jQuery 中完全对我产生了影响...必须承认当时我们没有使用 $.parseXML .....
    【解决方案2】:

    如果您先用父元素包装 jQuery 对象,然后在父元素上调用 .html(),则可以使用 .html()

    var $xml = $(somexmlstring);
    $xml.find('name:contains("' + somevalue + '")').remove();
    var newxmlstring = $('<x></x>').append($xml).html(); 
    

    即使原始 XML 字符串没有单个根元素,这也有效。但是,如果原始 XML 字符串包含 XML 声明(如 &lt;?xml version="1.0" encoding="UTF-8"?&gt;),则它不起作用。

    jsfiddle


    如果原始 XML 字符串是有效的 XML 文档,可以选择在开头包含 XML 声明,您可能希望像这样创建 jQuery 对象:

    var $xml = $($.parseXML(somexmlstring).documentElement);
    $xml.find('name:contains("' + somevalue + '")').remove();
    var newxmlstring = $('<x></x>').append($xml).html(); 
    

    jsfiddle

    【讨论】:

    • 试过你的jsfiddle,但这只会返回第一个节点,而不是整个字符串: data != $xml.wrap('').parent( ).html()
    • $.parseXML(data);将失败,因为 data 不是正确的 xml,它有多个节点,这就是为什么您首先包装字符串并将结果解析为 XML: var xml = $.parseXML('' + data + ' ');
    • @RemyNL - 谢谢。我一定错过了小提琴不起作用。问题在于使用.wrap()。它包装了所有顶级节点。解决方法是改用.append()。您对 $.parseXML() 要求 XML 字符串具有单个根元素也是正确的。
    【解决方案3】:

    你不需要 jquery,使用 XMLSerializer

    new XMLSerializer().serializeToString(xmlobj.documentElement);
    

    【讨论】:

      【解决方案4】:

      只要您的 XML 文档不包含一些额外花哨的命名空间,那么就很简单:

      var newxmlstring = $xml.html(); 
      

      【讨论】:

      • 这是我尝试过的第一件事,但我无法让它发挥作用。 jsfiddle.net/0x80/GwpQ5/3
      • 我可以解析 xml 字符串,在节点中搜索等,但每当我调用 html() 函数时,它似乎返回未定义。我可以调用 text() ,它会返回没有标签的 xml 节点的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2010-11-20
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多