web-dev-qa-db-fra.com

Convertir une chaîne en document XML en JavaScript

Voir cet exemple sur la page des exemples jQuery pour Ajax: 

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

Comment puis-je prendre une chaîne comme:

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

Et convertir cela en un objet XML DOM? multi-navigateur? 

UPDATE: S'il vous plaît voir les commentaires à la réponse de karim79.

21
BuddyJoe

Enveloppez-le dans un objet jQuery. Ensuite, utilisez les méthodes de manipulation DOM normales de jQuery.

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

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

Si vous voulez le reconvertir en chaîne simple (après l'avoir modifiée par exemple), vous pouvez le faire comme suit:

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

EDIT: Le manuel $ .ajax dit (sur l'option processData):

Par défaut, les données transmises aux données option en tant qu'objet (techniquement, autre chose qu'une chaîne) sera traité et transformé en une requête chaîne, correspondant à la valeur par défaut content-type "application/x-www-form-urlencoded" . Si vous souhaitez envoyer DOMDocuments, ou autres données non traitées, définissez ceci option à false.

Ainsi, si vous transmettez un objet jQuery au serveur, vous devrez le définir sur true ou le supprimer complètement (il est défini sur true par défaut). J'espère que ça a aidé.

35
karim79

Juste un avertissement sur la recherche d'appel - s'il s'agit d'un élément de niveau supérieur, vous devez utiliser le filtre à la place.

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

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

Vous pouvez faire la conversion sans jQuery. Ceci est tiré de DOMParser Documentation :

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

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

vous pouvez utiliser ce code simple pour convertir vos balises XML en texte 

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

rock solide code. fonctionne parfaitement dans tous les navigateurs. 

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