在JavaScript中将String转换为XML文档

Bud*_*Joe 21 javascript xml jquery dom

在Ajax的jQuery示例页面上看到这个例子:

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

我如何使用如下字符串:

var t = '<foo><bar>something</bar></foo>';  
Run Code Online (Sandbox Code Playgroud)

并将其转换为XML DOM对象?跨浏览器?

更新:请参阅karim79答案的评论.

kar*_*m79 35

将其包装在jQuery对象中.然后使用jQuery的普通DOM操作方法.

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

//loop over 'bar' nodes
t.find('bar').each(function () {
    alert($(this).text());
});
Run Code Online (Sandbox Code Playgroud)

如果你想将它转换回普通字符串(例如在修改它之后),你可以这样做:

//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);
}
Run Code Online (Sandbox Code Playgroud)

编辑:$ .ajax手册说(在processData选项上):

默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型"application/x-www-form-urlencoded" .如果要发送DOMDocuments或其他未处理的数据,请将此选项设置为false.

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


And*_*ell 11

只需要调用查找 - 如果它是顶级元素,则需要使用过滤器.

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

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


jab*_*abe 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");
Run Code Online (Sandbox Code Playgroud)