web-dev-qa-db-fra.com

Comment analyser XML avec jQuery?

Comment analyser le XML et comment naviguer dans le résultat avec jQuery? Voici mon exemple XML:

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

Je voudrais trouver le noeud par ce chemin Pages -> Page Name -> controls -> test?

37
SRA

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

Vous pouvez l'utiliser comme ceci:

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 code XML en JSON: http://www.fyneworks.com/jquery/xml-to-json/

40
Luwe

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/

17
Rafay

Je suppose que vous chargez le XML à partir d'un fichier externe. Avec $.ajax() , c'est assez 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');
    }
});

En outre, vous devez être cohérent à propos de la dénomination des nœuds XML. Vous avez à la fois des noms de nœuds en minuscules et en majuscules (<Page> contre <page>) qui peut prêter à confusion lorsque vous essayez d'utiliser des sélecteurs d'arborescence XML.

12
Jens Roland
$xml = $( $.parseXML( xml ) );

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

Regardez jQuery .parseXML()[docs] :

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

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

Je suis allé dans le sens de jQuery .parseXML() mais j'ai constaté que la syntaxe du chemin XML de 'Page[Name="test"] > controls > test' Ne fonctionnerait pas (si quelqu'un sait pourquoi crier s'il vous plaît!).

Au lieu de cela, j'ai enchaîné l'individu .find() pour obtenir quelque chose qui ressemble à ceci:

$xmlDoc.find('Page[Name="test"]')
       .find('contols')
       .find('test')

Le résultat atteint le même résultat que ce à quoi je m'attendais de la recherche en un coup.

1
mbarnettjones

Première chose qui apparaît dans les résultats de Google http: //think2loud.com/224-reading-xml-with-jquery/ Il n'y a pas de moyen simple d'accéder à la structure xml (comme vous l'avez décrit Pages-> pagename-> controls-> test ) dans jQuery sans aucun plugin.

0
WTK