J'ai écrit class pour analyser du xml dans un objet et ça ne fonctionne pas correctement, quand j'essaye d'obtenir la valeur d'un nœud, je reçois un zéro plutôt que le contenu du nœud.Pourquoi ce code java n'analyse-t-il pas correctement mon XML?
Voici une version simplifiée de ma classe qui fait juste l'analyse syntaxique xml d'un seul nœud:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XmlReaderCutDown {
private static Logger logger = Logger.getLogger(CtiButtonsXmlReader.class);
public static void testXml(String confFile){
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new File(confFile));
doc.getDocumentElement().normalize();
if (logger.isDebugEnabled()){
logger.debug("The root element is " + doc.getDocumentElement().getNodeName());
}
NodeList rows = doc.getElementsByTagName("row");
NodeList topRowButtons = ((Element)rows.item(0)).getElementsByTagName("button");
logger.debug("Top row has " +topRowButtons.getLength() + " items.");
Node buttonNode = topRowButtons.item(0);
NodeList nodeList = ((Element)buttonNode).getElementsByTagName("id");
logger.debug("Node list count for "+ "id" + " = " + nodeList.getLength());
Element element = (Element)nodeList.item(0);
String xx = element.getNodeValue();
logger.debug(xx);
String elementValue = ((Node)element).getNodeValue();
if (elementValue != null) {
elementValue = elementValue.trim();
}
else {
logger.debug("Value was null");
}
logger.debug("Node id = "+ elementValue);
} catch (ParserConfigurationException e) {
logger.fatal(e.toString(),e);
} catch (SAXException e) {
logger.fatal(e.toString(),e);
} catch (IOException e) {
logger.fatal(e.toString(),e);
} catch (Exception e) {
logger.fatal(e.toString(),e);
}
}
public static void main(String[] args){
DOMConfigurator.configure("log4j.xml");
testXml("test.xml");
}
}
Et voici une version dépouillée de mon fichier xml:
<?xml version="1.0"?>
<root>
<row>
<button>
<id>this is an id</id>
<action>action</action>
<image-src>../images/img.png</image-src>
<alt-text>alt txt</alt-text>
<tool-tip>Tool tip</tool-tip>
</button>
</row>
</root>
Cette est ce que la sortie de statments exploitation forestière:
DEBUG XmlReaderCutDown - l'élément racine est la racine
DEBUG XmlReaderCutDown - La ligne du haut contient 1 éléments.
DEBUG XmlReaderCutDown - Dépouillement liste de noeuds pour id = 1
DEBUG XmlReaderCutDown -
DEBUG XmlReaderCutDown - Valeur était nulle
DEBUG XmlReaderCutDown - Noeud id = null
Pourquoi pas il obtient le texte dans le noeud xml?
Je suis en utilisant 1.6_10 JDK
Remarque si vous voulez l'essayer, mais n'avez pas log4j vous pouvez remplacer les statments de journalisation avec système .out.println(); –