Récupération des feuilles dans un document XML
Bonjour a tous,
je suis debutante en java et je programme une petite application sur parcours d'un document XML avec l API JDOM mais je rencontre un probleme dont je trouve ni la cause ni la solution... alors sans tarder je vous exlique:
lors de parcours du fichier XML, le code va sauvegarder toutes les balises dans une NodeList et a partir de la chaque Node je le mettrai dans une autre liste et je vais acceder a son fils et tester sur le type de ce dernier, si c'est un TEXT_NODE il me la rajoute dans la 2eme liste .. ca marche mais le probleme c'est que quand le fils d'une balise est une autre balise il me la considere comme un TEXT_NODE alors quelle est un ELEMENT_NODE ... mais son getWholeText() est vide donc il me rajoute ce blanc dans la 2eme liste ce qui m'arrange pas du tout
Prière de m aider :ccool:
voila mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| File file = new File("C:\\Exercice2.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement ().normalize ();
System.out.println ("la racine est " +
doc.getDocumentElement().getNodeName());
NodeList listOfnds = doc.getElementsByTagName("*");
int compteur = listOfnds.getLength();
System.out.println("Total des balises: " + compteur);
for(int o=0;o < compteur; o++)
{
Node rrr= listOfnds.item(o);
String fff = rrr.getNodeName();
al.add(fff);
Node ttt = rrr.getFirstChild();
short type = ttt.getNodeType();
// System.out.println("type "+ type); type =3!!!
if(type == TEXT_NODE)
{
String ddd = ((Text) ttt).getWholeText();
al.add(ddd);
}
}
// la boucle for suivante n'est que pour afficher ce qu il y a dans la liste al --
for(int u=0; u < al.size(); u++)
{
System.out.println("mot num "+ u + " = "+ al.get(u));
} |
Exemple avec ce fichier XML:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?xml version="1.0" encoding="UTF-8"?>
<personnes>
<etudiant>
<nom>CynO</nom>
<prenoms>
<prenom>Nicolas</prenom>
<prenom>Laurent</prenom>
</prenoms>
</etudiant>
<etudiant classe="P1">
<nom>Superwoman</nom>
</etudiant>
<etudiant classe="P1">
<nom>Don Corleone</nom>
</etudiant>
</personnes> |
le resultat est :cry:
Citation:
la racine est personnes
Total des balises: 10
mot num 0 = personnes
mot num 1 =
mot num 2 = etudiant
mot num 3 =
mot num 4 = nom
mot num 5 = CynO
mot num 6 = prenoms
mot num 7 =
mot num 8 = prenom
mot num 9 = Nicolas
mot num 10 = prenom
mot num 11 = Laurent
mot num 12 = etudiant
mot num 13 =
mot num 14 = nom
mot num 15 = Superwoman
mot num 16 = etudiant
mot num 17 =
mot num 18 = nom
mot num 19 = Don Corleone
[JDOM] Récupération des feuilles dans un document XML
Salut ep31;
Merci pour l idée; elle est astucieuse; mais je dois impliquer l'instruction getNodeType() ; un noeud peut avoir un seul fils qui est au meme temps le FirstChild et le LastChild mais qui n'est pas un TEXT_NODE...
[JDOM] Récupération des feuilles dans un document XML
effectivement, ep31 vous avez eu raison, le probleme était la conséquence des identations ... il a juste fallu supprimer les espaces entre les balises dans le document XML pour que ca marche... merci encore, sans vous jaurai pas trouvé.;):D:
[JDOM]recuperation feuille XML
salut thelvin,
l'interet n'est pas de tester si un noeud a un seul fils mais le but est de tester si le noeud actuel (qui est une balise) a une feuille comme fils ou bien une autre balise:ccool::mrgreen:
[java] récuperation de feuilles XML
[JDOM] recuperation de feuilles XML
Monsieur thelvin , c'est exactement ce que j'ai fais des le debut (le code le montre bien), les espaces vides rajoutés dans ma liste sont la conséquence des identations. et d'apres ep31: les identations sont considérées comme des TEXT_NODE. il a raison.. mon probleme est resolu quand j'ai supprimé ces identations.merci