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

22

我看到了jQuery的Ajax示例,例如:

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

How do I take a string like:

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

并将其转换为XML DOM对象?跨浏览器? 更新: 请参见karim79答案下的评论。
5个回答

36

将其包装在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选项)如下:

默认情况下,传递给数据选项的数据作为对象(技术上而言,除字符串之外的所有内容)将被处理并转换为查询字符串,以适应默认的content-type“application/x-www-form-urlencoded”。如果您想发送DOMDocuments或其他未经处理的数据,请将此选项设置为false。

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


1
感谢您对processData的解释 - 《jQuery实战》没有像您在4个句子中那样解释清楚。 - BuddyJoe
1
只是提醒一下,在IE9 + quirks模式下会失败。这并不是什么大惊小怪的事情,但至少要注意一下。 - ken
IE9支持XMLSerialize,因此在IE中使用以下检查:if (window.ActiveXObject && (new XMLSerializer()) === undefined) { - Saravanan
这对于一个需要将XML存储为本地文本、读取并将其处理为匿名对象的Windows 8 Metro应用非常有帮助。我完全没有必要重新编写任何现有代码(它期望responseXML)。谢谢!+1 - wloescher
执行 '$' 命令行 API 失败:'<foo><bar>something</bar></foo>' 不是一个有效的选择器。 - Cloudy
显示剩余3条评论

11

关于调用find方法,需要注意如果是顶级元素,则需要使用filter方法。

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

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

@pubb - 你说得对,我忽略了那个细节,因为我总是循环遍历第二层元素。感谢指出。+1。 - karim79

7

您可以不使用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");

你让我今天开心极了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 爱你呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀! - U-Dev

0

稳定可靠的代码。在所有浏览器中完美运行。

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

这仅适用于jQuery已为它们创建了HTML节点。对于像$($.parseXML("<xml></xml>")这样的jQuery将其视为XML节点的情况,这将无法工作。 - ZiggyTheHamster

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接