2 votes

Filtrage XML de JDom

J'essaie de compter combien de certains éléments le document possède :

Iterator<?> processDescendants = doc.getDescendants(new ElementFilter("a")); 

while(processDescendants.hasNext()) {
   numPending++;
}

processDescendants = doc.getDescendants(new ElementFilter("b")); 

while(processDescendants.hasNext()) {
   numPending++;
}   

Il doit y avoir un moyen plus facile... par exemple :

processDescendants = doc.getDescendants(new ElementFilter("a|b")); // something like Regex maybe?

Quelqu'un peut aider ? Merci.

6voto

Roman Odaisky Points 351

Il y a essentiellement deux façons de le faire. La plus simple est de marcher sur les éléments...

Iterator<?> processDescendants = doc.getDescendants(new ElementFilter()); 

while(processDescendants.hasNext()) {
   Element e =  processDescendants.Next();
   string currentName = e.getTagName();
   if( currentName.equals("a") || currentName.equals("b") )
   {
       numPending++;
   }
}

Ou vous pouvez implémenter votre propre filtre pour ajouter cette fonctionnalité.

import org.jdom.filter.Filter;
import org.jdom.Element;

public class ElementRegexFilter implements Filter {

    private String regex = "";

    public ElementRegexFilter( String regex )
    {
        this.regex = regex;
    }

    public boolean matches( Object o )
    {
        if( o instanceof Element )
        {
            String ElementName = ((Element) o).getName();
            return ElementName.matches( regex );
        }
        return false;
    }

}

1voto

Shivan Dragon Points 8626

Je ne pense pas qu'il y en ait, mais vous pouvez implémenter votre propre Filtre pour l'analyseur JDOM, quelque chose comme MatchABElementFilter, et faire en sorte que la méthode match() renvoie "true" pour les objets de type élément avec le nom "a" ou "b".

1voto

Nathan Hughes Points 30377

Il existe un moyen déclaratif de faire ce que vous voulez. L'expression XPath pour cela est //a | //b .

JDOM comprend une classe utilitaire pour faire des requêtes XPath vous obtenez une liste de nœuds correspondants et vous pouvez appeler la fonction size sur la liste pour obtenir votre compte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X