[JS/Xml] Parser des éléments en fonction de la balise contenante?

Parser des éléments en fonction de la balise contenante? [JS/Xml] - Javascript/Node.js - Programmation

Marsh Posté le 10-06-2016 à 09:47:35    

Bonjour,
 
Je bloque sur une opération semblant simple mais je ne trouve pas de méthode :/
 
J'ai un XML à parser, en utilisant JavaScript (JQuery), et Ajax sous la forme :
 

<categorieA>
       <element key="toto"> blabla </element>
       <element key="titi"> blabla </element>
        ...
</categorieA>
 
<categorieB>
       <element key="tutu"> blabla </element>
       <element key="tata"> blabla </element>
        ...
</categorieB>
 
       


 
Les noms de catégories sont nombreux et imprévisibles, pas d'incrémentation ou autre.
 
J'arrive en Ajax à récupérer tous les "éléments" ainsi que les key associés, de cette façon:
 

$.ajax({
        type: "GET",
        url: monFichier.xml,
        dataType: "xml",
        success: function (data) {
             
            parseXml(data);  
 
        }
    });
 
 
    function parseXml(xml) {
 
         
        $(xml).find("element" ).each(
                function () {
 
                    key = $(this).attr("key" );
                    value = $(this).text();
                });
               


 
 
Mais j'ignore comment récupérer les balises "mères", qui plus est pour chaque occurence.
 
Le but est de générer pour chaque entrée un objet item ayant pour attribut .key + .value + .category, du style:
 

$(xml).find("element" ).each(
                function () {
 
                    key = $(this).attr("key" );
                    value = $(this).text();
                    category =[b] ???[/b]
                });
               


 
Dans un tel cas il faudrait que category = "balise parente de mon 'element' ".
 
Sinon imbriquer 2 boucles .each mais je ne vois pas comment, puisque je ne peux faire de $(xml).find(???).each désignant une variable générique qui prendra tout ce qui passe?
 
Merci d'avance pour votre aide [:gaga jap]

Reply

Marsh Posté le 10-06-2016 à 09:47:35   

Reply

Marsh Posté le 10-06-2016 à 18:15:46    

Etant donné que tu retournes du XML, tu peux tjrs utiliser l'API de base liée au DOM.
Lors du success, il te renvoit un objet de type XMLDocument ou equivalent ( https://developer.mozilla.org/en-US [...] MLDocument ), pour peu que ton XLM dispose d'une racine, tu peux choper et boucler dans tes elements, genre :
XMLDocument.firstChild // root
XMLDocument.firstChild.childNodes // de type NodeList, on peut le transformer en itérable facilement via NodeIterator, il te suffit alors de prendre l'element qui vient
 
Bref bonne chance


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 10-06-2016 à 23:45:09    

Merci pour ta réponse,
 
Je m'en suis finalement sorti en mixant JQuery et du Javascript classique:
 

$(xml).find("word" ).each(
                function () {
 
                    key = $(this).attr("name" );
                    value = $(this).text();
                    category = this.parentNode.nodeName;
                    addArray(key, value, category);
 
                });


 
this.parentNode.nodeName pointe bien sur le nom de la balise mère de l'élément "word" récupéré par la méthode .find :jap:
 
En attendant mes prochains soucis :D
 
:hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed