2010-01-07 2 views
0

Ceci est une question java, btw. J'utilise xPath et tout fonctionne bien jusqu'à ce que j'arrive au dernier point où je regarde l'ensemble de nœuds que j'ai cherché et j'ai besoin de faire une évaluation vraiment laide pour voir si le nœud I ' M traitant avec est de type ELEMENT ou TEXT avant que je puisse avoir sa valeur. Je me demandais s'il y avait une méthode dans le sens de celle que j'ai écrite ci-dessous qui va me donner la valeur.Existe-t-il un moyen d'obtenir une valeur de nœud avec xPath sans ce périlleux salto?

XPathExpression expr = inFeed.getXpath().compile(xPathEx); 
Object result = expr.evaluate(rootNode, XPathConstants.NODESET); 
NodeList nodeList = (NodeList)result; 
ret = ""; 
for(int i = 0; i< nodeList.getLength() ; i++){ 
    ret += getNodeValue(nodeList.item(i)) + ","; 
} 

donc ... voir la méthode getNodeValue()? Il m'obtient la chaîne qui est à l'intérieur de ce noeud et si le noeud n'est pas de type TEXT, il cherche des enfants et quand il trouve un noeud TEXT il le retourne.

Il DOIT y avoir un nœud natif pour faire ceci que je néglige, non?

Répondre

2

bah! c'était juste là ... Node.getTextContent(). <roseanne-roseannadanna> nevermind! </roseanne-roseannadanna>

1

En utilisant dom4j, vous pouvez donc ce joli simplement ...

import org.dom4j.Document; 
import org.dom4j.io.SAXReader; 

SAXReader reader = new SAXReader(); 
Document doc = reader.read('example.xml'); 
StringBuilder ret = new StringBuilder(); 
for (Node n : doc.selectNodes('//book')) { 
    if (ret.length() > 0) { 
    ret.append(", "); 
    } 
    ret.append(n.getText()); 
} 

println ret.toString(); 

(REMARQUE:. La syntaxe est groovy, mais il fonctionne de la même en Java)

La méthode selectNodes() prend une expression xpath. La méthode getText() renvoie tout le contenu textuel d'un nœud, y compris ses enfants.

Questions connexes