在 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("<xml></xml>")
),这将不起作用。以上是关于在 JavaScript 中将字符串转换为 XML 文档的主要内容,如果未能解决你的问题,请参考以下文章
在javascript中将表单数据保存为xml时防止跨站点(XSS)
如何在 PHP 中将 XML 字符串转换为 DOMDocument?