Конвертировать xml в строку с помощью jQuery - PullRequest
26 голосов
/ 28 июня 2011

Я загружаю xml-файл с помощью jQuery ajax loader, и мне нужно преобразовать его в строку, чтобы я мог снова сохранить его с помощью PHP-пост-переменных. Каков наилучший способ сделать это?

<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>

Ответы [ 10 ]

56 голосов
/ 28 июня 2011

Вот оно:

<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>

Взято из здесь

17 голосов
/ 08 апреля 2013

это решает проблему .innerHtml.

$('<div>').append(xmlObj).html()
5 голосов
/ 05 июня 2013

Это сработало для меня (кредит: 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;
 }          

Вот пример, который получает информацию о столбце из списка 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 ));
    }
});
5 голосов
/ 07 ноября 2012

Потратил много времени на эту проблему.С IE 9 выше функции должны работать по-другому.Потому что в IE9 xmlData[0].xml не работает (IE все еще любит шутки).И мы должны использовать XMLSerializer с IE 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;
}

И пример использования его с jQuery 1.8.2 (1.6.4 тоже работает).

3 голосов
/ 29 июня 2012

Была такая же проблема - xmlString возвращал пустую строку. Добавление [0] в селектор jQuery помогло обратиться к объекту типа XML:

Ваш Javascript:

<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[0]);
    }
    return xmlString;
}   
</script>

JQuery:

<script>
$(function(){ 
  xmlData = "<tag>just a sample here</tag>"; 
  xmlData= $(xmlData); 
  if (window.ActiveXObject){ 
    var xmlString = xmlData.xml; 
  } else {
    var oSerializer = new XMLSerializer(); 
    var xmlString = oSerializer.serializeToString(xmlData[0]);
  } 
  console.log(xmlString); 
})
</script>
1 голос
/ 25 февраля 2013

Вы можете использовать следующую функцию:

function getXmlString($xmlObj)
{   
    var xmlString="";
    $xmlObj.children().each(function(){
        xmlString+="<"+this.nodeName+">";
        if($(this).children().length>0){
            xmlString+=getXmlString($(this));
        }
        else
            xmlString+=$(this).text();
        xmlString+="</"+this.nodeName+">";
    });
    return xmlString;
}

Передать объект jquery xml в эту функцию

0 голосов
/ 28 марта 2018

function serializeXML(xmldom) {
  if (typeof XMLSerializer != "undefined") {
    return (new XMLSerializer()).serializeToString(xmldom);
  } else if (typeof xmldom.xml != "undefined") {
    return xmldom.xml;
  } else {
    throw new Error("Could not serialize XML DOM.");
  }
}

// test
var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",
  xmlDoc = $.parseXML(xml),
  xmlStr = serializeXML(xmlDoc);
console.log("xmlStr: " + xmlStr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
0 голосов
/ 14 июля 2014

Старый пост, который я знаю, но подумал, что я бы предложил это:

xml[0].outerHTML
0 голосов
/ 31 декабря 2013

Просто получите доступ к xml как значению атрибута объекта jQuery. так просто.

0 голосов
/ 27 сентября 2013

В моем случае

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

не работает. Это проблема с IE10 .

Так что я могу решить эту проблему следующим образом:

if(window.ActiveXObject){
    xmlString = xmlData.attr('xml');
}

И работает нормально с любым браузером.

...