使用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+=""+this.nodeName+">"; }); 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对象的属性值。 就如此容易。