if (n.hasChildNodes())
System.out.println(n.getFirstChild().getNodeValue());
else
System.out.println(n.getNodeValue());
6 Réponses :
Essayez d'extraire de l'élément plutôt que du nœud:
try {
String data = "<a><b c='d' e='f'>0.15</b></a>";
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(data));
Document document = documentBuilder.parse(is);
NodeList nl = document.getElementsByTagName("b");
Element el = (Element) nl.item(0);
Text elText = (Text) el.getFirstChild();
String theValue = elText.getNodeValue();
System.out.println(theValue);
} catch (Exception e) {
System.out.println("Exception " + e);
}
@mkal - Je viens de modifier pour générer le NodeValue au lieu de l'instance de texte!
C'est parce que Un élément de fait n'a aucun En bref, vous voudrez Parfois, l'élément contient plusieurs nœuds de texte, car ils ont une taille maximale, auquel cas vous aurez besoin de quelque chose de ceci, de la page liée précédemment: P> NODEVALUE code> . Au lieu de cela, il a un nœud texte en tant qu'enfant, qui a le NODEVALUE code> que vous voulez. GetNodeValue () Code> sur le premier enfant de Le nœud d'élément. p>
Bonne explication et merci beaucoup pour l'excellente fonction. Fonctionne comme un champion.
System.out.println(n.getFirstChild().getNodeValue());
Si le nœud n'a pas d'autres descendants imbriqués, que N.getTextContent () code> fonctionne assez bien. P>
private String getTextValue(Element element, String string) {
String textVal = null;
NodeList nl = element.getElementsByTagName(string);
if(nl != null && nl.getLength() > 0) {
Element el = (Element)nl.item(0);
textVal = el.getFirstChild().getNodeValue();
}
return textVal;
}
Vous pouvez utiliser Joox en tant que wrapper pour Standard DOM, pour simplifier votre code.
Double value = $(data).find("b").text(Double.class);