40 votes

Comment puis-je obtenir la chaîne XML entière à partir d'un XMLDocument retourné par jQuery (navigateur croisé)?

J'ai essayé et échoué à trouver comment obtenir de l'ensemble de la chaîne XML de la XMLDocument retourné par un GET. Il y a beaucoup de questions DONC, sur la façon de trouver ou remplacer des éléments dans l'objet, mais je n'arrive pas à trouver une réponse à comment faire pour obtenir l'intégralité du document en tant que chaîne de caractères.

L'exemple que je travaille est à partir d' ici. Le "faire quelque chose avec xml"-une partie est là où j'en suis pour le moment. J'ai l'impression que ce doit être vraiment trivial, mais je n'arrive pas à trouver comment. Est-il une "xml.de données()" ou similaires, qui peuvent être utilisés à cette fin?

$.ajax({
    url: 'document.xml',
    type: 'GET',
    dataType: 'xml',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        // do something with xml
    }
});

Le cas d'utilisation est que je veux nourrir le fichier xml du plugin flash et pour cela j'ai besoin le code XML comme une chaîne de caractères.

54voto

jitter Points 35805

Si vous voulez les deux, obtenez la réponse sous forme de document XML et sous forme de chaîne. Tu devrais pouvoir faire

 success: function(data){
  //data.xml check for IE
  var xmlstr = data.xml ? data.xml : (new XMLSerializer()).serializeToString(data);
  alert(xmlstr);
}
 


Si vous le voulez comme chaîne, pourquoi spécifiez-vous que dataType:xml ne serait pas alors plus approprié dataType:text ?

44voto

BalusC Points 498232

Vous le voulez en texte brut au lieu d'un objet XML? Changer dataType de 'xml' à 'text' . Consultez la documentation $ .ajax pour plus d'options.

23voto

Paul Gorbas Points 381

Vous pouvez également facilement convertir un objet xml en chaîne, dans votre script java:

 var xmlString = (new XMLSerializer()).serializeToString(xml);
 

1voto

Ryan Brunner Points 8983

Si vous n'avez besoin que d'une chaîne représentant le xml renvoyé par jquery, définissez simplement votre type de données sur "texte" plutôt que d'essayer de réanalyser le xml en texte. Ce qui suit devrait simplement vous rendre le texte brut de votre appel ajax:

 $.ajax({
    url: 'document.xml',
    type: 'GET',
    dataType: 'text',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        // do something with xml
    }
});
 

1voto

vmfedor Points 11

Bien que cette question a déjà été répondu, je voulais dire une mise en garde: Lors de la récupération de données XML à l'aide de jQuery avec Internet Explorer, vous DEVEZ spécifier le contenu de type "text/xml" (ou "application/xml") ou bien vous ne serez pas en mesure d'analyser les données comme si c'était XML à l'aide de jQuery.

Vous pensez peut-être que c'est une chose évidente, mais il m'a surpris lors de l'utilisation de Mozilla/Chrome/Opéra à la place de IE. Lors de la récupération d'une "chaîne" de XML avec un contenu de type "texte", tous les navigateurs sauf IE vont vous permettre d'analyser les données (à l'aide des sélecteurs jQuery) comme si elle était XML. IE ne jetez pas une erreur et tout simplement de ne pas renvoyer des résultats de jQuery instruction de sélection.

Donc, dans votre exemple, aussi longtemps que vous avez seulement besoin de la chaîne-version sérialisée de l'XML et ne s'attendent pas jQuery pour faire toute sorte de sélection sur le DOM XML, vous pouvez définir le type de contenu "texte". Mais si vous avez AUSSI besoin de parser le XML avec jQuery, vous aurez besoin d'écrire une routine personnalisée qui sérialise les données XML dans une chaîne de caractères pour vous, ou bien de récupérer une version du XML avec du contenu de type "xml".

Espérons que l'aide à quelqu'un :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X