L'analyse de xml en java - getTextContent() et getNodeValue() seulement de retour \n, \t, et les espaces

Je vais avoir un peu de mal avec l'analyse du XML en java. Mon fichier XML est lu correctement, et je suis en mesure d'obtenir la plupart des informations à partir du fichier sans aucun problème (c'est à dire. le StreamType nœud, indiqué dans le fragment de code xml), en utilisant des nœuds getTextContent() fonction.

MAIS, quand j'essaie de travailler avec des enfants d'un nœud, à la fois getNodeValue() et getTextContent() retourne cette valeur aléatoire: "\n \t\t".

La NodeList propertyNodes semble être correctement remplie (contient tous les 18 "Propriété" des éléments).

Voici un extrait de mon code:

Document document;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(appXML);

...

String typeName = document.getElementsByTagName("StreamType").item(0).getTextContent();

...

String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
int nodelistlength = propertyNodes.getLength();
for (int i = 0; i < nodelistlength; i++) {
    Node currentNode = propertyNodes.item(i);
    Node nameNode = currentNode.getFirstChild();
    Node valueNode = currentNode.getLastChild();

    String name = nameNode.getNodeValue();
    String value = valueNode.getNodeValue();

    if (nameNode.getTextContent().equalsIgnoreCase("maxConnections"))
        limit = valueNode.getTextContent();
}

Et voici quelques captures du XML, je suis en train de l'analyser:

<Root>
 <Application> 
  <Streams>
   <StreamType>live</StreamType>
   ...
  </Streams>

  ...

  <Properties> 

   ...

   <Property>
    <Name>maxConnections</Name> 
    <Value>1000</Value> 
   </Property> 

   ...

  </Properties>
 </Application>
</Root>

Une idée de ce que je fais de mal? Merci beaucoup!

EDIT: Fonctionne maintenant, merci pour le tutoriel posté par @home. C'est de cette façon que j'ai résolu le code:

1) Modifié le bloc de code commençant par "Chaîne" de limite et se terminant avec la boucle de l'extrémité du support:

String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
for (int i = 0; i < propertyNodes.getLength(); i++) {
    Node currentNode = propertyNodes.item(i);

    if (currentNode.getNodeType() != Node.ELEMENT_NODE)
        continue;

    Element currentElement = (Element)currentNode;

    if (getTagValue("Name",currentElement).equalsIgnoreCase("maxConnections"))
        limit = getTagValue("Value",currentElement);
}

2) Ajouté cette fonction pratique du tutoriel:

private static String getTagValue(String sTag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
    Node nValue = (Node) nlList.item(0);
    return nValue.getNodeValue();
}

Il récupère l'enfant les paires nom/valeur de la "Propriétés" de l'élément parfaitement maintenant. Merci beaucoup!

Aucune raison que vous ne pouvez pas utiliser JAXB?
votre tutoriel résolu mon problème, et maintenant, mon code fonctionne! Pourriez-vous s'il vous plaît poster cela comme une réponse afin que je puisse marquer comme "le meilleur" et lui donner un upvote? Merci beaucoup! 🙂
Williams: Ajout de la réponse 🙂

OriginalL'auteur Katherine Williams | 2011-09-12