40 votes

Comment analyser un fichier XML à l'aide de jQuery ?

Comment analyser le XML et comment naviguer dans le résultat à l'aide de jQuery ? Voici mon exemple de XML :

<Pages>
  <Page Name="test">
    <controls>
      <test>this is a test.</test>
    </controls>
  </Page>
  <Page Name = "User">
    <controls>
      <name>Sunil</name>
    </controls>
  </Page>
</Pages>

J'aimerais trouver le nœud par le chemin suivant Pages -> Page Name -> controls -> test ?

2 votes

Qu'entendez-vous par Comment puis-je trouver les détails d'un nœud en utilisant cette hiérarchie Pages->nom de page->contrôles->test ? ? Veuillez préciser. Notez également que Page !== page .

42voto

Luwe Points 1989

Il y a le $.parseXML pour cela : http://api.jquery.com/jQuery.parseXML/

Vous pouvez l'utiliser comme suit :

var xml = $.parseXML(yourfile.xml),
  $xml = $( xml ),
  $test = $xml.find('test');

console.log($test.text());

Si vous voulez vraiment un objet, vous avez besoin d'un plugin pour cela. Ce plugin, par exemple, convertira votre XML en JSON : http://www.fyneworks.com/jquery/xml-to-json/

2 votes

Bon sang... La question était "comment puis-je trouver les détails d'un noeud en utilisant cette hiérarchie Pages->pagename->contrôles->test ?" et non "comment puis-je analyser un fichier XML" J'ai raison ou j'ai raison ?

0 votes

Impossible sans plugins, voir mon édition. Editar Ah, ce n'est pas vous qui avez posé la question. Vous avez raison bien sûr, mais cela ne nous empêche pas de faire d'autres suggestions.

3 votes

@WTK : Le titre est Comment analyser un fichier xml à l'aide de jquery . Je ne sais pas ce que l'OP veut dire dans l'autre phrase...

18voto

3nigma Points 21164

Vous pouvez utiliser .parseXML

var xml='<Pages>
          <Page Name="test">
           <controls>
              <test>this is a test.</test>
           </controls>  
          </Page>
          <page Name = "User">
           <controls>
             <name>Sunil</name>
           </controls>
          </page>
        </Pages>';

jquery

    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc );
    $($xml).each(function(){
       alert($(this).find("Page[Name]>controls>name").text());
     });

voici le violon http://jsfiddle.net/R37mC/1/

4 votes

Note : Vous devez ajouter des barres obliques inversées à la fin des lignes XML, sinon l'interpréteur Javascript ne les acceptera pas comme une seule chaîne.

0 votes

@Jens Roland oui mais dans le fiddle j'ai enlevé les espaces blancs, et tnx pour l'info

13voto

Jens Roland Points 19171

Je suppose que vous chargez le XML à partir d'un fichier externe. Avec $.ajax() En fait, c'est très simple :

$.ajax({
    url: 'xmlfile.xml',
    dataType: 'xml',
    success: function(data){
        // Extract relevant data from XML
        var xml_node = $('Pages',data);
        console.log( xml_node.find('Page[Name="test"] > controls > test').text() );
    },
    error: function(data){
        console.log('Error loading XML data');
    }
});

Par ailleurs, vous devez être cohérent dans la désignation des nœuds XML. Vous avez des noms de nœuds en minuscules et en majuscules ( <Page> par rapport à <page> ), ce qui peut prêter à confusion lorsque vous essayez d'utiliser des sélecteurs d'arbre XML.

10voto

Vicky Points 2492
$xml = $( $.parseXML( xml ) );

$xml.find("<<your_xml_tag_name>>").each(function(index,elem){
    // elem = found XML element
});

0 votes

Cette solution est vraiment bonne, pourriez-vous l'améliorer avec un code complet ? Merci beaucoup ! +1

2voto

Felix Kling Points 247451

Jetez un coup d'œil à la page d'accueil de jQuery. .parseXML() [docs] :

var $xml = $(jQuery.parseXML(xml));

var $test = $xml.find('Page[Name="test"] > controls > test');

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