Nettoyer l'espace de noms de la manipulation avec dom4j

Nous sommes à l'aide de dom4j 1.6.1, à analyser le XML venir de quelque part. Parfois, la balise la mention de l'espace de noms ( par exemple : ) et parfois non ( ). Et c'est à l'appel de l'Élément.selectSingleNode(String s ) échoue.

Pour l'instant nous avons 3 solutions, et nous ne sommes pas heureux avec eux

1 - Supprimer tous les noms occurence avant de faire quoi que ce soit avec le document xml

xml = xml .replaceAll("xmlns=\"[^\"]*\"","");
xml = xml .replaceAll("ds:","");
xml = xml .replaceAll("etm:","");
[...] //and so on for each kind of namespace

2 - Supprimer de l'espace de noms, juste avant l'obtention d'un nœud
En appelant

Element.remove(Namespace ns)

Mais il ne fonctionne que pour un nœud et le premier niveau de l'enfant

3 - l'Encombrement du code par

node = rootElement.selectSingleNode(NameWithoutNameSpace)
if ( node == null )
    node = rootElement.selectSingleNode(NameWithNameSpace)

Alors ... qu'en pensez-vous ? La sorcière est le moins pire ? Avez-vous une autre solution à proposer ?

OriginalL'auteur Antoine Claval | 2009-09-14