GetElementById avec l'API DOM

Résolu
Bonsoir,

Comme il est écrit dans le titre, j'ai un problème avec l'utilisation de la méthode GetElementById avec l'API DOM dans la manipulation de fichier XML.

Lorsque j'utilise cette méthode, la console me renvoie "null" comme si l'id en question n'existe pas. J'aimerai, s'il vous plait que l'on m'explique pourquoi mon code est défaillant.

Ci-dessous le fichier XML :

<Organisme id="mairie-95002-01" codeInsee="95002" dateMiseAJour="2013-07-01" pivotLocal="mairie">

<Nom>Mairie d'Ableiges</Nom>

</Organisme>

Ci-dessous mon code java :

package TestXML;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class test2 {

public static void main(String[] args) {

Document document = null;
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;

try {
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
document = builder.parse("mairie-95002-01.xml");
Element insee = document.getElementById("codeInsee");
System.out.println (insee);
} catch (Exception e) {
e.printStackTrace();
}

}

}

Merci d'avance.

Cordialement,

Tylkaz.

4 réponses

  1. J'ai finalement trouvé la solution de ce problème. Il fallait en effet utilisé getAttribute comme il est spécifié sur ce lien : http://www.java2s.com/Code/JavaAPI/org.w3c.dom/NodegetAttributes.htm

    Cordialment Tylkaz.
    1. Modérateur
      Tu peux effectivement récupérer un attribut quelconque de cette manière mais tu perds l'intérêt des identifiants...
      Au passage tu remarqueras l'utilisation des DTD dans le code que tu nous indique. C'est à mon sens indispensable pour un fichier XML sinon ce n'est qu'un fichier texte sans sémantique.
  2. Bonjour

    Je ne m'y connais pas en XML, mais il me semble que codeInsee est un attribut et non un élément.
    Il faudrait donc d'abord isoler l'élément d'id "mairie-95002-01" puis lire son attribut avec Element.getAttribute("codeInsee");
    1. Comment et quelle doit être cette DTD que je dois utiliser afin d'avoir ce codeInsee ?

      Merci d'avoir répondu.
      1. Modérateur
        La DTD est un entête du fichier XML qui décrit son format et permet d'en valider le contenu.
        Cela donnerait quelque chose comme ça (à vérifier) :

        <!ELEMENT Organisme (Nom*) >
        <!ELEMENT Nom (#PCDATA) >
        <!ATTLIST Organisme id            ID    #REQUIRED
                            codeInsee     CDATA #REQUIRED 
                            dateMiseAJour CDATA #REQUIRED 
                            pivotLocal    CDATA #REQUIRED >
        

        À voir : Document type definition, Validating with XML Schema
    2. Modérateur
      Je ne suis pas tout à fait sûr, mais il me semble qu'il faut prendre la notion d'id au sens XML, c'est à dire accompagné d'une DTD qui spécifie quel est ton identifiant, il ne suffit donc pas que ton attribut s'appelle "id" pour que cela fonctionne.