Konvertiere xml in einen String mit jQuery

Ich lade eine XML-Datei mit jQuery ajax loader und muss sie in eine Zeichenkette konvertieren, damit ich sie mit PHP-Post-Variablen wieder speichern kann. Was ist der beste Weg, dies zu tun?

 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); }  

Hier ist es:

  

Von hier genommen

Dies funktioniert um das .innerHtml Problem.

 $('
').append(xmlObj).html()

Dies funktionierte für mich ( 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; } 

Hier ein Beispiel, das Informationen zu einer Spalte aus einer SharePoint-Liste abruft:

 var soapEnv = " \  \  \ 0 \ Announcements \  \  \ "; 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 )); } }); 

Hab viel Zeit für dieses Problem aufgewendet. Mit IE 9 oben sollten functionen auf andere Weise funktionieren. Weil in IE9 xmlData[0].xml nicht funktioniert (IE mag immer noch Witze). Und wir müssen XMLSerializer mit IE v9 und höher (?!) Verwenden

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

Und ein Beispiel für die Verwendung mit jQuery 1.8.2 (1.6.4 funktioniert auch).

  $.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); } }); 

Hatte das gleiche Problem – xmlString gab eine leere Zeichenfolge zurück. Das Hinzufügen von [0] zum jQuery-Selektor half beim Adressieren eines Objekts vom XML-Typ:

Ihr Javascript:

  

jQuery:

  

Sie können folgende function verwenden:

 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+=""; }); return xmlString; } 

Übergeben Sie das Objekt jquery xml an diese function

 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 Title", xmlDoc = $.parseXML(xml), xmlStr = serializeXML(xmlDoc); console.log("xmlStr: " + xmlStr); 
  

Ein alter Post, den ich kenne, aber ich dachte, ich würde das vorschlagen:

 xml[0].outerHTML 

In meinem Fall

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

functioniert nicht. Dies ist ein Problem mit IE10 .

Also kann ich dieses Problem wie folgt beheben:

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

Und funktioniert mit jedem Browser gut.

Greifen Sie einfach auf xml als Attributwert des jQuery-Objekts zu. so einfach ist das.