GetElementById avec l'API DOM

Résolu/Fermé
Tylkaz Messages postés 8 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 10 décembre 2013 - 9 déc. 2013 à 18:22
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 10 déc. 2013 à 18:08
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

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
9 déc. 2013 à 19:32
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.
0
Tylkaz Messages postés 8 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 10 décembre 2013 13
10 déc. 2013 à 00:06
Comment et quelle doit être cette DTD que je dois utiliser afin d'avoir ce codeInsee ?

Merci d'avoir répondu.
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
Modifié par KX le 10/12/2013 à 07:58
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
0
Utilisateur anonyme
10 déc. 2013 à 09:04
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");
0
Tylkaz Messages postés 8 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 10 décembre 2013 13
10 déc. 2013 à 17:58
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.
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
10 déc. 2013 à 18:08
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.
0