【问题标题】:Convert String to XML Document in JavaScript在 JavaScript 中将字符串转换为 XML 文档
【发布时间】:2010-11-20 09:24:05
【问题描述】:

在 Ajax 的 jQuery 示例页面上看到了这个示例:

var xmlDocument = [create xml document];
$.ajax({
        url: "page.php",
        processData: false,
        data: xmlDocument,
        success: someFunction
    });

如何获取如下字符串:

var t = '<foo><bar>something</bar></foo>';  

然后将其转换为 XML DOM 对象?跨浏览器?

更新: 请参阅 cmets 到 karim79 的回答。

【问题讨论】:

    标签: javascript jquery xml dom


    【解决方案1】:

    将它包装在一个 jQuery 对象中。然后在上面使用 jQuery 的普通 DOM 操作方法。

    var t = $('<foo><bar>something</bar></foo>');
    
    //loop over 'bar' nodes
    t.find('bar').each(function () {
        alert($(this).text());
    });
    

    如果您想将其转换回纯字符串(例如在修改后),您可以这样做:

    //then convert it back to a string
    //for IE 
    if (window.ActiveXObject) {
        var str = t.xml;
        alert(str);
     }
    // code for Mozilla, Firefox, Opera, etc.
    else {
       var str = (new XMLSerializer()).serializeToString(t);
       alert(str);
    }
    

    编辑:$.ajax manual says(在 processData 选项上):

    默认情况下,数据传入数据 作为对象的选项(从技术上讲, 字符串以外的任何内容)将是 处理并转换为查询 字符串,适合默认值 内容类型 “应用程序/x-www-form-urlencoded”。 如果你想发送 DOMDocuments,或者 其他未处理的数据,设置这个 选项为 false。

    因此,如果您将 jQuery 对象传递给服务器,则需要将其设置为 true,或者完全省略它(设置为 true默认)。希望对您有所帮助。

    【讨论】:

    • 也许我在 $.ajax 调用中遇到了问题。我确实像你说的那样把它包起来了。然后我在服务器上的日志显示我正在传递:[object Object] 我现在应该尝试什么?
    • 我对 .ajax() 做错了吗?我只是将它作为字符串传递并且它起作用了。诡异的。这与 processData 选项有关吗?还是我没有打开的其他选项?
    • @Tyndall - 查看我的编辑。基本上,如果您将 XML 字符串传递给服务器,那么您当前的设置是正确的(processData:false。如果您传递 jQuery 对象,则需要摆脱该选项或将其设置为 true。
    • 感谢对 processData 的解释——“jQuery in Action”没有像你在 4 句话中解释得那么好。
    • 请注意,这在 IE9 + quirks 模式下会失败。不是一个巨大的惊喜,但至少要注意一些事情。
    【解决方案2】:

    请注意调用 find - 如果它是顶级元素,则需要使用过滤器。

    var t = $('<foo><bar>something</bar></foo>');
    
    //loop over 'foo' nodes
    t.filter('foo').each(function () {
      alert($(this).find('bar').text());
    });
    

    【讨论】:

    • @pubb - 你说得对,我跳过了那个细节,因为我总是遍历二级元素。 +1 指出这一点。
    【解决方案3】:

    您可以在没有 jQuery 的情况下进行转换。这取自 Mozilla 的DOMParser Documentation

    // Create a DOMParser
    var parser = new DOMParser();
    
    // Use it to turn your xmlString into an XMLDocument
    var xmlDoc = parser.parseFromString(xmlString, "application/xml");
    

    【讨论】:

    • 你成就了我的一天!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!爱你uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!!!!!!
    【解决方案4】:

    您可以使用这个简单的代码将您的 xml 标签转换为文本

    var temp_var = $("<p/>").append($(your_xml_data)).htML()
    

    【讨论】:

      【解决方案5】:

      坚如磐石的代码。在所有浏览器中都能完美运行。

      var xmlFields = $("<root><reports name='report 1'><item 
                     field='ord_num' desc='Order    Number'/></reports></root>");
      alert(xmlFields[0].outerHTML);
      

      【讨论】:

      • 这只是因为 jQuery 已经为这些创建了 HTML 节点。对于 jQuery 将它们视为 XML 节点的东西(如 $($.parseXML("&lt;xml&gt;&lt;/xml&gt;")),这将不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 2013-05-30
      • 2019-05-28
      相关资源
      最近更新 更多