使用jQuery将xml转换为字符串

Yar*_*rin 26 xml jquery tostring xml-serialization

我正在使用jQuery ajax加载器加载一个xml文件,并需要将其转换为字符串,以便我可以使用PHP post变量再次保存它.做这个的最好方式是什么?

<script type='text/javascript'>

jQuery.ajax({
    type: "GET",
    url: "data.xml",
    dataType: "xml",
    success: parseXML
    });


function parseXML(xml) {

    var xml_string = jQuery(xml).text();  // (This doesn't work- returns tagless, unformatted text) 
    alert(xml_string);

}

</script>
Run Code Online (Sandbox Code Playgroud)

Yar*_*rin 57

这里是:

<script type='text/javascript'>

function xmlToString(xmlData) { 

    var xmlString;
    //IE
    if (window.ActiveXObject){
        xmlString = xmlData.xml;
    }
    // code for Mozilla, Firefox, Opera, etc.
    else{
        xmlString = (new XMLSerializer()).serializeToString(xmlData);
    }
    return xmlString;
}   

</script>
Run Code Online (Sandbox Code Playgroud)

取自这里

  • Firefox在XMLSerializer()行中显示"安全错误". (3认同)
  • 我注意到在将jQuery对象传递给此函数时,我在Firefox中遇到了安全性错误,但在传入XML对象时似乎工作正常. (2认同)

Goj*_*zic 17

这适用于.innerHtml问题.

$('<div>').append(xmlObj).html()
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但它会杀死标签上的外壳.(特别是在SOAP请求上很明显.)<LogOnResponse>因为<logonresponse> (3认同)

小智 5

花了很多时间来解决这个问题.使用IE 9以上功能应该以另一种方式工作.因为在IE9 xmlData[0].xml中不起作用(IE仍然喜欢笑话).我们必须使用XMLSerializerIE v9及更高版本(?!)

function xmlToString(xmlData) { // this functions waits jQuery XML 

    var xmlString = undefined;

    if (window.ActiveXObject){
        xmlString = xmlData[0].xml;
    }

    if (xmlString === undefined)
    {
        var oSerializer = new XMLSerializer();
        xmlString = oSerializer.serializeToString(xmlData[0]);
    }

    return xmlString;
}
Run Code Online (Sandbox Code Playgroud)

和jQuery 1.8.2一起使用的例子(1.6.4也适用).

   $.ajax(
        {
            type: type,
            url: url,
            data: values,
            dataType: 'html', //get response in plain text
            success: function(response) {    

                //transform it to jQuery XML DOM
                var xmlDoc = jQuery.parseXML(response);
                var xml = $(xmlDoc);

                //do some search and so on
                var divtag = xml.find('div[id="content"]');
                var divtxt = xmlToString(divtag);

                //consume it
                alert(divtxt);
                $('#main-content').html(divtxt);

            }
        });
Run Code Online (Sandbox Code Playgroud)


小智 5

这对我有用(信用:http://www.ibm.com/developerworks/xml/tutorials/x-processxmljquerytut/section3.html):

 function getXmlAsString(xmlDom){
      return (typeof XMLSerializer!=="undefined") ? 
           (new window.XMLSerializer()).serializeToString(xmlDom) : 
           xmlDom.xml;
 }          
Run Code Online (Sandbox Code Playgroud)

这是一个从SharePoint列表中检索有关列的信息的示例:

var soapEnv =
    "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
        <soapenv:Body> \
             <GetList xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                <rowLimit>0</rowLimit> \
                <listName>Announcements</listName> \
            </GetList> \
        </soapenv:Body> \
    </soapenv:Envelope>";


jQuery.support.cors = true; 
$.ajax({
    url: "http://sharepoint/_vti_bin/lists.asmx",
    type: "POST",
    dataType: "xml",
    data: soapEnv,
    contentType: "text/xml; charset=\"utf-8\"",
    complete: function(xData){
        var xmlDoc = $.parseXML(xData.responseText), $xml = $(xmlDoc)           
        $Fields = $xml.find("Field");
        $field = $Fields.filter("Field[Name='Title']")[0];

        //Show the xml
        alert(getXmlAsString( xmlDoc ));
        alert(getXmlAsString( $field ));
    }
});
Run Code Online (Sandbox Code Playgroud)