IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Java Discussion :

Passage de JDOM à DOM (syntaxe)


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 174
    Par défaut Passage de JDOM à DOM (syntaxe)
    Bonjour à tous,
    Dans le cadre d'un projet, je dois enlever JDOM et remplacer le code l'utilisant en utilisant simplement DOM à la place. Or, à ce que j'ai vu la logique est un peu différente au niveau de la syntaxe (ex: on manipule une NodeList avec des Node qui peuvent être des éléments ou des attributs par exemple alors qu'en JDOM cela est simplifié et on manipule directement des Element et des Attribut).

    En effet, j'ai remplacé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Reading of the xml content
    final SAXBuilder sxb = new SAXBuilder();
    final Document document = sxb.build(xml);
    final Element root = document.getRootElement();
     
    // Retrieving the properties Element
    final Element properties = (Element) root.getChildren().get(0);
     
    // look into the properties elements to found the ident-module one and
    // modifying it
    final List<Element> propertiesElts = properties.getChildren();
    Par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Reading of the xml content
    final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    final DocumentBuilder db = dbf.newDocumentBuilder();
    final org.w3c.dom.Document document = db.parse(xml);
     
    // get the root
    final org.w3c.dom.Element root = document.getDocumentElement();
     
    // Retrieving the properties Element
    final org.w3c.dom.Element properties = (org.w3c.dom.Element) root.getChildNodes().item(0);
     
    // look into the properties elements to found the ident-module one and
    // modifying it
    final NodeList propertiesElts = properties.getChildNodes();
    Je ne sais pas si ce code est correct car le Node retourné par "root.getChildNodes().item(0);" pourrait être un attribut aussi non? Cela vous semble t-il correct?

    De plus, je ne sais pas comment remplacer le code JDOM suivant en DOM dans lequel on créé un élément puis des attributs qu'on lui ajoute avant d'ajouter cet élément en première position sous l'élément properties:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    final Element pwdEncoderNode =
    new Element(PASSWORD_ENCODER_NODE, root.getNamespace());
    final Attribute configurationAttr = new Attribute(CONF_ATTR, "");
    final Attribute classpathAttr = new Attribute(ENC_ATTR_NAME, aEncoderClassPath);
    pwdEncoderNode.setAttribute(configurationAttr);
    pwdEncoderNode.setAttribute(classpathAttr);
    // Add in first position to make the search faster after
    properties.addContent(0, pwdEncoderNode);
    Pourriez-vous m'aider svp?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par philou44300 Voir le message
    Dans le cadre d'un projet, je dois enlever JDOM et remplacer le code l'utilisant en utilisant simplement DOM à la place.
    Mon Dieu quelle merveilleuse idée. "Simplement" n'est pas le mot que j'aurais employé.

    Citation Envoyé par philou44300 Voir le message
    Je ne sais pas si ce code est correct car le Node retourné par "root.getChildNodes().item(0);" pourrait être un attribut aussi non?
    Non. Mais ça pourrait être un nœud texte, composé uniquement de fins de lignes et d'espaces par exemple.

    Citation Envoyé par philou44300 Voir le message
    Cela vous semble t-il correct?
    Non, car ça pourrait être un nœud texte.

    Citation Envoyé par philou44300 Voir le message
    De plus, je ne sais pas comment remplacer le code JDOM suivant en DOM dans lequel on créé un élément puis des attributs qu'on lui ajoute avant d'ajouter cet élément en première position sous l'élément properties:
    Pour utiliser les namespaces, il faut avoir appelé dbf.setNamespaceAware(true); avant toute autre chose.

    Pour insérer un élément en première position, on peut utiliser insertBefore(). Oui, c'est lourd.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 174
    Par défaut
    Je te remercie pour ta réponse.

    Citation Envoyé par thelvin Voir le message
    Non. Mais ça pourrait être un nœud texte, composé uniquement de fins de lignes et d'espaces par exemple.
    .
    D'accord merci mais du coup y a t-il un moyen de récupérer le premier élément sous la racine comme cela était fait en JDOM par cette ligne:
    final Element properties = (Element) root.getChildren().get(0);?

    J'ai pensé à une boucle sinon qui parcours la liste jusqu'au premier élément mais s'il y a un moyen plus simple je suis preneur^^...


    Citation Envoyé par thelvin Voir le message
    Pour utiliser les namespaces, il faut avoir appelé dbf.setNamespaceAware(true); avant toute autre chose.

    Pour insérer un élément en première position, on peut utiliser insertBefore(). Oui, c'est lourd.
    Je n'ai pas tout compris. Aurais-tu un exemple de code avec création d'un élement, création d'attributs puis ajout d'attributs à l'élément en DOM stp? Ce qui m'embête c'est que Element est une interface donc que faut-il utiliser pour faire l'équivalent du final Element pwdEncoderNode = new Element(PASSWORD_ENCODER_NODE, root.getNamespace());? Idem pour le new Attribute?

    Pour le insertBefore j'ai déjà pensé à faire quelque chose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    properties.insertBefore((Node) pwdEncoderNode, properties.getFirstChild());
    Serait-ce correct?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par philou44300 Voir le message
    D'accord merci mais du coup y a t-il un moyen de récupérer le premier élément sous la racine comme cela était fait en JDOM par cette ligne:
    final Element properties = (Element) root.getChildren().get(0);?

    J'ai pensé à une boucle sinon qui parcours la liste jusqu'au premier élément mais s'il y a un moyen plus simple je suis preneur^^...
    Tu devrais regarder si tu ne peux pas faire root.getElementsByTagNameNS(namespace, "properties").item(0).
    Mais si ce n'est pas possible, alors une boucle ou autre bidule compliqué est obligatoire, il n'y a pas plus simple. Tu peux tout de même la cacher dans une méthode pour alléger ton code.

    Citation Envoyé par philou44300 Voir le message
    Aurais-tu un exemple de code avec création d'un élement, création d'attributs puis ajout d'attributs à l'élément en DOM stp?
    Ne trouvant pas de FAQ ou tutoriel répondant à ces questions, j'en suis réduit à concéder le faire moi-même. Raison de plus pour laquelle sortir de JDOM était une mauvaise idée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element pwdEncoderNode = document.createElementNS(root.getNamespaceURI(), PASSWORD_ENCODER_NODE);
    pwdEncoderNode.setAttribute(ENC_ATTR_NAME, aEncoderClassPath);
    Citation Envoyé par philou44300 Voir le message
    Pour le insertBefore j'ai déjà pensé à faire quelque chose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    properties.insertBefore((Node) pwdEncoderNode, properties.getFirstChild());
    Serait-ce correct?
    Un Element est un Node, donc pas besoin de cast. Mais oui, bien joué.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 174
    Par défaut
    Je te remercie encore un fois de ta réponse précise .

    Pour le fait d'abandonner JDOM ce n'est pas mon choix mais c'est parce qu'il serait plus compliqué de justifier son utilisation au client (choix au niveau de la gestion du projet) que de ne pas l'utiliser et d'utiliser DOM qui reste "natif". Je connais justement JDOM (qui simplifie grandement le code je trouve) mais n'ai jamais utilisé DOM d'où les difficultés parfois pour faire un code équivalent à ce qui était fait avant avec JDOM.

    Encore merci .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec Struts 2 et XML / JDOM / DOM
    Par fruwen7 dans le forum Struts 2
    Réponses: 0
    Dernier message: 17/07/2012, 16h14
  2. [DOM] syntaxe d'échappement des guillemets
    Par yakou32 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/12/2008, 12h52
  3. [DOM] Syntaxe Json et DOM
    Par lekunfry dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/08/2007, 04h53
  4. [Ajax] Prob passage de param. dans boucle [DOM]
    Par narnou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/02/2006, 16h54
  5. [DOM][nodes]Petit problème de syntaxe..
    Par GDVL dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/09/2005, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo