Преобразование xml в строку с помощью jQuery
Я загружаю xml файл с загрузчиком jQuery ajax и должен преобразовать его в строку, чтобы я мог снова сохранить его, используя переменные post 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>
Ответы
Ответ 1
Вот он:
<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>
Взято из здесь
Ответ 2
это работает вокруг проблемы .innerHtml.
$('<div>').append(xmlObj).html()
Ответ 3
Прошло много времени для этой проблемы.
С 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 тоже работает).
$.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);
}
});
Ответ 4
Имел ту же проблему - 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>
Ответ 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;
}
Вот пример, который извлекает информацию о столбце из списка 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 ));
}
});
Ответ 6
Вы можете использовать следующую функцию:
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 объект этой функции
Ответ 7
В моем случае
if(window.ActiveXObject){
xmlString = xmlData.xml;
}
Не работает. Это проблема с IE10.
Поэтому я могу исправить эту проблему следующим образом:
if(window.ActiveXObject){
xmlString = xmlData.attr('xml');
}
И работаем отлично с любым браузером.
Ответ 8
Старый пост, который я знаю, но думал, что я предлагаю это:
xml[0].outerHTML
Ответ 9
Просто введите xml как значение атрибута объекта jQuery. так же просто.