Remplissage et appel d'un tableau de String
Salut tout le monde
j'ai une méthode qui permet de retourner un tableau de String.En effet cet méthode prend comme entrée la racine de fichier xml à parser,et le nom de balise à recherché.
Dans mon exemple si le nom de la balise égale à <collectionlink> alors on extraire le contenu de la balise <collectionlink> et le met dans un tableau.
Ce tableau contient la liste des contenus des balises <collectionlink>
Mon code manque la partie remplissage,et comment appeler
cette fonction.Merci d'avance
-Pseudo code de fichier xml:
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
| <?xml version="1.0" encoding="utf-8"?>
<article>
<name id="85199">Kremlin</name>
<conversionwarning>0</conversionwarning>
<body>
<p>On peut définir le mot
<emph3>kremlin</emph3>comme la citadelle de la ville. Les villes
anciennes russes n'avaient pas de murailles, exceptée la partie
centrale avec la
<collectionlink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="581.xml">cathédrale</collectionlink>, le
palais du souverain de la ville, etc.</p>
<p>Si on parle du kremlin, on pense surtout au
<unknownlink src="kremlin de Moscou">kremlin de
Moscou</unknownlink>, qui est une ville dans la ville, un
ensemble de palais, d'églises et de cathédrales, enserré dans des
murailles rouges. Il est certainement le kremlin le plus renommé.
Aussi il existe plusieurs autres kremlins en
<collectionlink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="2549.xml">Russie</collectionlink>, par exemple le
kremlin du
<collectionlink xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="56240.xml">Novgorod</collectionlink>,
<unknownlink src="Pskov">Pskov</unknownlink>,
<unknownlink src="Kazan">Kazan</unknownlink>et autres villes
anciennes.</p>
<p>Le Kremlin de Moscou est un des quartiers le plus célèbre de la
ville .</p>................................................ |
-La méthode Java:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public static String[] afficheTitre(Element _element, String _noeud){
String titree[] = null;
int i=0;
List<Element> tmp = new ArrayList<Element>( _element.getChildren());
for (Element courant : tmp) {
if (courant.getName().equals(_noeud)) {
String titre = courant.getText();
System.out.println("Titre "+i+" est : "+titre);
i++;
}
else {
afficheTitre(courant, _noeud);
}
}
return titree;
} |
Remplissage et appel fonction retourne un tableau de string
Citation:
Envoyé par
joel.drigo
Salut,
premièrement il plus facile de créer une liste et de la convertir en tableau à la fin, parce que tu ne connais pas d'avance le nombre d'éléments qui va correspondre à ta condition :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public static String[] getTitres(Element _element, String _noeud){
List<String> titres = new ArrayList<String>();
for (Element courant : _element.getChildren()) {
if (courant.getName().equals(_noeud)) {
titres.add( extraireTexte(courant) );
}
}
return titres.toArray(new String[titres.size()]);
} |
Maintenant, il faut définir la méthode extraireTexte(Element element). Le problème c'est que l'élément CollectionLink ne contient pas forcément que du texte on dirait, mais une structure qui me semble être du xhtml, et donc qui va être parsée sous forme d'arborescence d'Element.
S'il s'agit vraiment de texte pur un element.getText() suffit.
Sinon, le plus simple éventuellement, et d'extraire les éléments fils, de créer un nouvel élément root bidon, d'y ajouter les éléments fils extraits, de serialiser en String ce nouvel arbre, et de virer les tags du root de ce texte (le premier ouvrant et le dernier fermant).
Effectivement Joél,merci encore pour votre aide
Voici la solution:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public static String[] afficheTitre(Element _element, String _noeud){
List<String> titree = new ArrayList<String>();
afficheTitre(_element, _noeud, titree);
return titree.toArray(new String[titree.size()]);
}
private static void afficheTitre(Element _element, String _noeud, List<String> titree){
List<Element> tmp = new ArrayList<Element>( _element.getChildren());
for (Element courant : tmp) {
if (courant.getName().equals(_noeud)) {
titree.add( courant.getText() );
}
else {
afficheTitre(courant, _noeud, titree);
}
}
} |