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

IT技术 javascript jquery xml dom
2021-02-27 00:30:37

在 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 对象?跨浏览器?

更新:请参阅对 karim79 的回答的评论。

5个回答

将它包装在一个 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 手册说(在 processData 选项上):

默认情况下,作为对象传递给 data 选项的数据(从技术上讲,除了字符串之外的任何内容)将被处理并转换为查询字符串,适合默认的内容类型“application/x-www-form-urlencoded” . 如果要发送 DOMDocuments 或其他未处理的数据,请将此选项设置为 false。

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

@Tyndall - 看我的编辑。基本上,如果您将 XML 字符串传递给服务器,则您当前拥有的设置是正确的 (processData : false。如果您传递 jQuery 对象,则需要删除该选项或将其设置为 true。
2021-04-16 00:30:37
也许我在 $.ajax 调用中出错了。我确实像你说的那样把它包起来。然后我在服务器上的日志显示我正在传入:[object Object] 我现在应该尝试什么?
2021-04-22 00:30:37
我在 .ajax() 上做错了吗?我只是将它作为字符串传递,并且它起作用了。奇怪的。这与 processData 选项有关吗?或者我没有打开的另一种选择?
2021-04-24 00:30:37
感谢您对 processData 的解释 - “jQuery in Action”并没有像您在 4 句话中解释的那样好。
2021-05-09 00:30:37
请注意,这在 IE9 + quirks 模式下失败。不是一个巨大的惊喜,但至少需要注意一些事情。
2021-05-15 00:30:37

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

var t = $('<foo><bar>something</bar></foo>');

//loop over 'foo' nodes
t.filter('foo').each(function () {
  alert($(this).find('bar').text());
});
@pubb - 你是对的,我跳过了那个细节,因为我总是循环遍历二级元素。+1 指出。
2021-04-26 00:30:37

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

// Create a DOMParser
var parser = new DOMParser();

// Use it to turn your xmlString into an XMLDocument
var xmlDoc = parser.parseFromString(xmlString, "application/xml");
你成就了我的一天!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 爱你呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜!!!!!!!!!
2021-05-07 00:30:37

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

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

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

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>"))的情况,这将不起作用。
2021-04-20 00:30:37