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!
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
Vous devez vous connecter pour publier un commentaire.
Malheureusement, la Java DOM n'est pas que facile à utiliser. Vous devez faire la distinction entre différents types de nœuds. Pas le meilleur tutoriel, mais c'est ce que je viens de trouver à l'aide de Google: http://mkyong.com/java/how-to-read-xml-file-in-java-dom-parser
OriginalL'auteur home
Qui est de l'exactitude du contenu de la valeur du nœud.
La valeur de la
a
nœud (qui dans ce cas est égal au contenu du texte) n'correctement consistent en l'espace entre le début et la balise de fin, en omettant bien sûr de la les espaces dans lab
étiquette parce que, eh bien, appartient à lab
balise et de ne pasa
.OriginalL'auteur Bombe