在 JavaScript 中将字符串转换为 XML 文档

Posted

技术标签:

【中文标题】在 JavaScript 中将字符串转换为 XML 文档【英文标题】:Convert String to XML Document in JavaScript 【发布时间】: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 的回答。

【问题讨论】:

【参考方案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;")),这将不起作用。

以上是关于在 JavaScript 中将字符串转换为 XML 文档的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中将表单数据保存为xml时防止跨站点(XSS)

如何在 PHP 中将 XML 字符串转换为 DOMDocument?

无法在 xml 查询中将字符串转换为数字类型

如何在iOS中将字符串转换为xml? (目标 C,xcode 7.2)

如何在QT中将xml节点数据转换为字符串[重复]

如何在javascript中将字符串转换为文件对象?