jQuery将XML标记转换为大写

时间:2010-12-04 01:59:31

标签: jquery xml ajax

我有一个AJAX请求,它返回一个XML字符串,我想将其注入DOM。我的功能看起来像

  $.ajax({
    type: 'POST',
    url: "myrequest",
    data: postdata,
    datatype: 'json',
    success: function (arguments) {
        newxmlstring = arguments.newxml;
        oldnode = $("someselector specified in the arguments passed");
        oldnode.replaceWith(newxmlstring);
    }
  });

这有效,但似乎replaceWith函数将所有nodeName映射到服务器发送的响应的大写版本。我假设这是一个尝试使用jQuery来处理XML的怪癖?

例如,当我访问<data>asdf</data>时,如果响应字符串为$(newnode)[0].nodeName,我会'DATA'

是否有人知道如何处理新的XML,同时保留小写的nodeName

编辑:我的响应是JSON,因为它包含新的xml字符串和一些关于新xml节点附加位置的其他数据。所以如果可能的话,我宁愿保留datatype: 'json'

2 个答案:

答案 0 :(得分:2)

From this answer

  

XML(以及基于XML的语言)   作为XHTML),tagName保留大小写。在   HTML,tagName返回元素名称   以规范的大写形式。该   tagName的值与此相同   of nodeName。

一些搜索表明很多人都遇到过这个问题,尤其是选择器和XML(jQuery的find()区分大小写,而find()中使用的选择器是小写的。)

Here's a function其他人正在使用将字符串转换为可能适合您的XML:

$.text2xml = function(sXML) { 
    // NOTE: I'd like to use jQuery for this, but jQuery makes all 
    // tags uppercase 
    //return $(xml)[0]; 
    var out; 
    try{ 
        var dXML = ($.browser.msie)?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser(); 
        dXML.async = false; 
    }catch(e){ throw new Error("XML Parser could not be instantiated"); }; 
    try{ 
        if($.browser.msie) out = (dXML.loadXML(sXML))?dXML:false; 
        else out = dXML.parseFromString(sXML, "text/xml"); 
    } 
    catch(e){ throw new Error("Error parsing XML string"); }; 
    return out;
}

答案 1 :(得分:0)

尝试使用:

datatype: 'xml',

而不是'json',因为您正在检索XML响应。设置数据类型将导致它被正确解析为XML。