Bonjour,

Je suis bloqué depuis ce matin sur un problème d'extraction de données avec JDOM :

- Je dois extraire des noeuds (et leurs descendants) en fonction de leur nom ("iterateElement").
Ces noeuds peuvent être situés à n'importe quel endroit de l'arbre.

J'ai essayé le code suivant qui filtre, mais un peu tro : si l'élément rercherché n'es pas à la racine, seulel la racine est renvoyée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
public static void WriteRootPrefixElementNoPrefix(String in, String out, String rootElement, final String iterateElement) {
InputStream is = new ByteArrayInputStream(in.getBytes());
SAXBuilder sxb = new SAXBuilder();
 
document = sxb.build(is);
root = document.getRootElement();
Iterator i = root.getDescendants();
 
Integer count = 1;
 
while (i.hasNext()) {
	Element current = (Element) i.next();
 
	if (current.isRootElement() != true && !(current.getName().contains(iterateElement))) {
		System.out.println("Cloning Element #" + count);
		current.removeContent();
        count++;
	}
}
Je ne peux pas utiliser de xpath car les données en entrée sont hétérogènes : certains flux possèdent un ou plusieurs namespaces, d'autres aucuns.

J'ai également essayé de copier chaque élément dont le nom "match" l'IterateElement mais la fonction plante avec comme code "org.jdom.Text cannot be cast to org.jdom.Element".