12
votes

Java XML analyse en utilisant DOM pour obtenir NODEVALUE

        if (n.hasChildNodes())
            System.out.println(n.getFirstChild().getNodeValue());
        else 
            System.out.println(n.getNodeValue());

0 commentaires

6 Réponses :


7
votes

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);
}


1 commentaires

@mkal - Je viens de modifier pour générer le NodeValue au lieu de l'instance de texte!



11
votes

C'est parce que Un élément de fait n'a aucun NODEVALUE . Au lieu de cela, il a un nœud texte en tant qu'enfant, qui a le NODEVALUE que vous voulez.

En bref, vous voudrez GetNodeValue () sur le premier enfant de Le nœud d'élément.

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: xxx


1 commentaires

Bonne explication et merci beaucoup pour l'excellente fonction. Fonctionne comme un champion.



3
votes
System.out.println(n.getFirstChild().getNodeValue());

0 commentaires

1
votes

Si le nœud n'a pas d'autres descendants imbriqués, que N.getTextContent () fonctionne assez bien.


0 commentaires

2
votes
 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;

}

0 commentaires

1
votes

Vous pouvez utiliser Joox en tant que wrapper pour Standard DOM, pour simplifier votre code.

Double value = $(data).find("b").text(Double.class);


0 commentaires