在JavaScript中将String转换为XML文档

时间:2009-08-17 20:45:54

标签: javascript jquery xml dom

在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 个答案:

答案 0 :(得分:35)

将其包装在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的形式进行了urlencoded”。   如果要发送DOMDocuments,或者   其他未处理的数据,设置此   选项为false。

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

答案 1 :(得分:11)

只需要调用find即可 - 如果它是顶级元素,则需要使用过滤器。

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

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

答案 2 :(得分:1)

你可以在没有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");

答案 3 :(得分:0)

您可以使用此简单代码将xml标记转换为文本

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

答案 4 :(得分:0)

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

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