Преобразование строки в XML-документ в JavaScript

видел этот пример на странице примеров jQuery для Ajax:

var xmlDocument = [create xml document];
$.ajax({
        url: "page.php",
        processData: false,
        data: xmlDocument,
        success: someFunction
    });

Как взять строку, например:

var t = '<foo><bar>something</bar></foo>';  

и преобразовать это в объект XML DOM? кросс-браузер?

обновление: Пожалуйста, см. Комментарий к ответ karim79 по.

5 ответов


оберните его в объект jQuery. Затем используйте на нем обычные методы манипуляции DOM jQuery.

var t = $('<foo><bar>something</bar></foo>');

//loop over 'bar' nodes
t.find('bar').each(function () {
    alert($(this).text());
});

Если вы хотите преобразовать его обратно в простую строку (после ее изменения, например), вы можете сделать это так:

//then convert it back to a string
//for IE 
if (window.ActiveXObject) {
    var str = t.xml;
    alert(str);
 }
// code for Mozilla, Firefox, Opera, etc.
else {
   var str = (new XMLSerializer()).serializeToString(t);
   alert(str);
}

"правка":$.руководство "Аякса" говорит (опцию processData):

по умолчанию данные передаются в данные опция как объект (технически, ничего кроме string) будет обработано и преобразован в запрос строка, соответствующая умолчанию тип содержимого "application / x-www-form-urlencoded". Если вы хотите отправить DOMDocuments, или другие необработанные данные, установите это параметр в false.

поэтому, если вы передаете объект jQuery на сервер, вам нужно установить это в правда, или опустить его вообще (он установлен в правда по умолчанию). Надеюсь, это помогло.


просто предупреждает о вызове find-если это элемент верхнего уровня, вам нужно использовать фильтр.

var t = $('<foo><bar>something</bar></foo>');

//loop over 'foo' nodes
t.filter('foo').each(function () {
  alert($(this).find('bar').text());
});

вы можете выполнить преобразование без jQuery. Это взято из Mozilla Документация DOMParser:

// Create a DOMParser
var parser = new DOMParser();

// Use it to turn your xmlString into an XMLDocument
var xmlDoc = parser.parseFromString(xmlString, "application/xml");

вы можете использовать этот простой код для преобразования тегов xml в текст

var temp_var = $("<p/>").append($(your_xml_data)).htML()

код rock solid. отлично работает во всех браузерах.

var xmlFields = $("<root><reports name='report 1'><item 
               field='ord_num' desc='Order    Number'/></reports></root>");
alert(xmlFields[0].outerHTML);