使用jQuery将xml转换为字符串

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

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

这里是:

  

从这里开始

这适用于.innerHtml问题。

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

这对我有用(信用: 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 = " \  \  \ 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 )); } }); 

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

 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也适用)。

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

有同样的问题 – xmlString返回一个空字符串。 将[0]添加到jQuery选择器有助于解决XML类型对象:

你的Javascript:

  

jQuery的:

  

您可以使用以下function:

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

将jquery xml对象传递给此函数

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

我知道一个旧post,但我想我会建议:

 xml[0].outerHTML 

在我的情况下

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

不管用。 这是IE10的问题。

所以我能够解决这个问题如下:

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

并且可以与任何浏览器一起使用

只需访问xml作为jQuery对象的属性值。 就如此容易。