Parser (DOM) un fichier xml en java?

Signaler
Messages postés
42
Date d'inscription
samedi 27 mars 2004
Statut
Membre
Dernière intervention
23 juillet 2004
-
Messages postés
1
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
16 juin 2004
-
bonjour,
je souhaite récupérer des données d'un fichier xml.
<!DOCTYPE ProductionBureautique
[
<!ELEMENT ProductionBureautique (TraitementBureautique)+>
<!ELEMENT TraitementBureautique (AliasTraitement?, BaseDonnees,CompteConnexion, MotdePasseConnexion, ProcedureStockee, ProgrammeFormatage)>
<!ELEMENT AliasTraitement (#PCDATA)>
<!ELEMENT BaseDonnees (#PCDATA)>
<!ELEMENT CompteConnexion (#PCDATA)>
<!ELEMENT MotdePasseConnexion (#PCDATA)>
<!ELEMENT ProcedureStockee (#PCDATA)>
<!ELEMENT ProgrammeFormatage (#PCDATA)>
<!ATTLIST TraitementBureautique FormatSortie (PDF|RTF|CSV) #REQUIRED>
]>

<TraitementBureautique FormatSortie= "PDF">
Toto
 doc 
<CompteConnexion>totoCpt</CompteConnexion>
<MotdePasseConnexion>totoMdp</MotdePasseConnexion>
totoProc

xalan

</TraitementBureautique>
<TraitementBureautique FormatSortie ="PDF">
Tata
doc
<CompteConnexion>tataCpt</CompteConnexion>
<MotdePasseConnexion>tataMdp</MotdePasseConnexion>
tataProc

xalan

</TraitementBureautique>
<TraitementBureautique FormatSortie= "RTF">
Titi
 doc 
<CompteConnexion>titiCpt</CompteConnexion>
<MotdePasseConnexion>titiMdp</MotdePasseConnexion>
titiProc

fop

</TraitementBureautique>



je voudrai par exemple ne récupérer que les info concernant "Titi".
j'ai trouvé une méthode mais je ne trouve pas ça tres propre.
/*Acces au fichier XML*/
File fichier  = new File("ProductionBureautique.xml");
  	try 
  	{
  		/*génération d'un document*/
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
/*Analyse du fichier XML dans le document*/
Document doc = builder.parse(fichier);
/*Acces au noeud TraitementBureautique*/
NodeList noeud = doc.getElementsByTagName("TraitementBureautique");
/*parcours de l'arbre*/
for (int i = 0; i < noeud.getLength(); i++) 
{
  /* aces aux éléments*/
  Element element = (Element) noeud.item(i);

              /*recherche de l'AliasTraitement correspondant au parametre contenu dans l'url*/
  NodeList AliasTraitement = element.getElementsByTagName("AliasTraitement");
  Element line = (Element) AliasTraitement.item(0);
if (getCharacterDataFromElement(line).equals("Titi"))
{
 	/*Alias de traitement*/
  	writer.println("AliasTraitement: " + getCharacterDataFromElement(line));
  	/*Base de données*/
  	NodeList BaseDonnees = element.getElementsByTagName("BaseDonnees");
  	line = (Element) BaseDonnees.item(0);
writer.println("BaseDonnees: " + getCharacterDataFromElement(line));
/*Compte de connexion*/
NodeList CompteConnexion = element.getElementsByTagName("CompteConnexion");
            		line = (Element) CompteConnexion.item(0);
writer.println("CompteConnexion: " + getCharacterDataFromElement(line));

NodeList MotdePasseConnexion = element.getElementsByTagName("MotdePasseConnexion");
line = (Element) MotdePasseConnexion.item(0);
writer.println("MotdePasseConnexion: " + getCharacterDataFromElement(line));

NodeList ProcedureStockee = element.getElementsByTagName("ProcedureStockee");
line = (Element) ProcedureStockee.item(0);
writer.println("ProcedureStockee: " + getCharacterDataFromElement(line));

NodeList ProgrammeFormatage = element.getElementsByTagName("ProgrammeFormatage");
line = (Element) ProgrammeFormatage.item(0);
writer.println("ProgrammeFormatage: " + getCharacterDataFromElement(line));

NodeList FormatSortie = element.getElementsByTagName("FormatSortie");
line = (Element) FormatSortie.item(0);
writer.println("FormatSortie: " + getCharacterDataFromElement(line));
}
}
        }
  catch (Exception e) {
writer.println(e.getMessage());
e.printStackTrace(writer);
  }


de +, ce code ne parvient pas à me récupérer mon dernier élément "FormatSortie" qui est une liste (séquence). quel méthode faut il employer pour récupérer cette valeur?
merci de votre aide....

1 réponse

Messages postés
1
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
16 juin 2004

Salut,


pour ton cas FormatSortie est un attribue de l element TraitementBureautique essaye alors la fct getAttribute:

noeud.getAttribute("FormatSortie")

ca devrai marcher ;)