Document XML et Java

Statut
N'est pas ouverte pour d'autres réponses.

Roudoudou

Lecteur discret
Bonjour j'utilise un org.w3c.com.Document pour obtenir la représentation d'un fichier XML se trouvant sur mon disque dur.

Ce fichier XML est conforme à un DTD. Ce dernier comporte des éléments avec leurs attributs dont certains sont marqués comme identifiant.

Lorsque j'utilise la méthode Document.getElementById(String id) je parviens a obtenir l'élément identifier par "id".

Si j'ajoute des éléments a ce Document par une méthodes quelconque, et que ces élements ajoutés sont conformes au DTD (c'est a dire qu'ils possèdent eux aussi leur attributs les identifiant). Alors la, la méthode Document.getElementById(id) ne marche plus, enfin elle me renvoie null.

Est ce que quelqu'un ayant deja utilisé Java et XML pourrait essayé ?

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

public class Test20040302 {
   public static void main (String[] args) {
     try {
       DocumentBuilderFactory docBuilderFactory = 
DocumentBuilderFactory.newInstance();
       DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
       Document xmlDocument = docBuilder.parse(args[0]);
       if (xmlDocument != null) {
         Element god = xmlDocument.getElementById("Kibo");
         if (god != null) {
           System.out.println(god.getAttribute("home"));
         }
         else {
           System.out.println("Element not found.");
         }
       }
     }
     catch (Exception e) {
       System.out.println(e);
     }
   }
}
Si vous passez en argument le fichier xml contenant ce code par exemple vous obtiendrez bien la maison de Kibo.

Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE gods [
   <!ELEMENT gods (god)+>
   <!ELEMENT god empty>
   <!ATTLIST god
     name ID #REQUIRED
     home CDATA #implied>
]>
<gods>
   <god name="Kibo" home="http://www.kibo.com/" />
   <god name="Xibo" />
</gods>
Mais si par exemple apres la requete de la maison de kibo vous creer un nouveau noeud par la méthode suivante:


Code:
static void addNode(Document doc) {
   Element elem = doc.createElement("god"); 
   elem.setAttribute("home", "GamerZ");
   elem.setAttribute("name", "Butch");
   ((Element)
doc.getElementsByTagName("gods").item(0)).appendChild(elem);

}
Vous ne saurez pas récupérer la maison de "Butch" par la méthode Document.getElementById()

??!??!??!!!?

Ca m'ennuie assez parce que mon fichier XML est construit pendant l'exécution du programme qui appelle cette méthode.


Un tout grand merci a ceux qui me trouveront la solution. Gamerz n'étant pas ma premiere source d'aide pour ce genre de probleme. Merci aussi d'avoir pris le temps de lire ;)
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut