Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Trouver le bon "Element"


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Trouver le bon "Element"
    Bonjour,

    Je travaille avec Eclipse et JDOM (enfin j'essaye)
    voici mon problème :

    Je dois mettre à jour le texte d'une balise d'un fichier xml, mais hormis le nom de la balise (type Element), je n'ai aucun autre repère...

    Un exemple pour être un peu plus clair :
    Code XML :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Main>
                   <balise1>
                   </balise1>
                   <balise2>
                        <sousbalise2>
                             <texteSB2>toto</texteSB2>
                        </sousbalise2>
                   </balise2>
              </Main>


    Le problème est que je dois mettre "titi" au lieu de "toto" et la seule indication dont je dispose est le nom de la balise "texteSB2".

    Les tutos et exemples que je trouve se basent toujours sur le nom de la balise "parente" or moi je ne le connais pas...

    Y a-t-il une solution ?

    Merci d'avance

  2. #2
    Modérateur

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Filter<Element> filter = Filters.element("texteSB2");
    for(Element monElement : doc.getDescendants(filter)) {
      monElement.setText("titi");
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    j'ai ajouté ton code et j'ai eu l'erreur suivante :

    "Exception in thread "main" java.util.ConcurrentModificationException: ContentList was modified outside of this Iterator"

  4. #4
    Modérateur

    Diable, tu as raison. Du coup ça va être un peu plus chiant.

    - Si tu as un seul élément à modifier :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    Filter<Element> filter = Filters.element("texteSB2");
    Element monElement = doc.getDescendants(filter).next();
    monElement.setText("titi");


    - Si tu dois modifier plusieurs éléments :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Filter<Element> filter = Filters.element("texteSB2");
    List<Element> mesElements = new ArrayList<Element>();
    for(Element monElement : doc.getDescendants(filter)) {
      mesElements.add(monElement);
    }
    for(Element monElement : mesElements) {
      monElement.setText("titi");
    }


    Autre possibilité :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    XPathFactory xpathFactory = XPathFactory.instance();
    XPathExpression<Element> xpath = xpathFactory.compile("//texteSB2", Filters.element());
    for(Element monElement : xpath.evaluate(doc)) {
      monElement.setText("titi");
    }


    Mais pour celle-ci il faut aussi la bibliothèque Jaxen.
    La différence, c'est que les XPathExpression ne renvoient pas une collection "vivante", comme le fait getDescendants(). Autrement dit, XPathExpression s'occupe de faire à notre place la première boucle de mon exemple 2. Il ne reste donc que la deuxième boucle à faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Un grand merci à toi Thelvin !

    J'ai tout testé sauf l'option XpathFactory et ça marche très bien !!

    Merci encore !!

  6. #6
    Nouveau Candidat au Club
    Pour ceux qui rencontreraient le problème
    En se basant sur la méthode static IteratorUtils.toList(Iterator<T>) de l'API Common Collection, vous obtenez une liste altérable d'Element

  7. #7
    Modérateur

    Certes, mais il devient rare d'avoir cette bibliothèque dans son projet. Et l'ajouter juste pour ça, bof bof.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java