Java - Parsen von xml mit DOM
Ich versuche, die folgenden xml. Ich kann auf die Wochennummer leicht aber nicht auf die Kinder für EmployeeRatesLevelA und EmployeeRatesLevelB. Das Ziel ist, speichern Sie diese, um eine Klasse Datensatz mit Feldern Wochennummer und ArrayLists, EmployeeRatesLevelA und EmployeeRatesLevelB.
Danke.
<DataSet ActiveFrom="2011/04/06">
<WeekNumber>8</WeekNumber>
<EmployeeRatesLevelA>
<Rate>0</Rate>
<Rate>0.12</Rate>
</EmployeeRatesLevelA>
<EmployeeRatesLevelB>
<Rate>0.15</Rate>
<Rate>0.20</Rate>
</EmployeeRatesLevelB>
</DataSet>
Document doc = loadXml("data.xml");
NodeList nodeList = doc.getElementsByTagName("DataSet");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
NodeList weekNumberList = element.getElementsByTagName("WeekNumber");
Element weekElement = (Element) weekNumberList.item(0);
NodeList textElementList = weekElement.getChildNodes();
System.out.println("Weeknumber:"+ ((Node)textElementList.item(0)).getNodeValue().trim());
}
public static Document loadXml(String file) {
try {
return (DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(file)));
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return null;
}
Das gibt mir die Wochennummer aber ich bin nicht auf EmployeeRatesLevelA und EmployeeRatesLevelB.
Möchte lernen, andere tolle Dinge, aber ich bin neu in Java und der xml-Dokument ist wirklich klein -, DOM-sollte ausreichen.
- Was ist dein code?
- Wie groß ist der Datensatz? Wird es nur ein paar kleine Datensätze oder etwas viel größeres?
- Nur als Rat für die Zukunft - nicht mit DOM für XML. Es gibt viele viel effizientere Techniken - vtd-xml, SAX (sächsischen), XOM
- Das dataset ist eher klein, etwa 3-4 Instanzen von <DataSet>
- Welche version des JDK benutzt du?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erwähnt in den Kommentaren, bitte zeigen Sie uns Ihre Java-code. Möglicherweise möchten Sie auch prüfen, Blick auf JAXB - Java Architecture for XML Binding. Dieser ist speziell darauf ausgerichtet, die Darstellung von XML als Java-Objekte. Es möglicherweise nicht möglich, für die Lösung aus welchem Grund auch immer, aber definitiv einen Blick:
http://jaxb.java.net/tutorial/
DataSet
Folgende domain-Objekt unten ist das, was du beschrieben hast in deiner Frage:
Demo
Folgende code veranschaulicht, wie verwenden Sie die JAXB-runtime zu konvertieren Sie Ihre XML-zu/von Ihrem domain-Objekten:
Element.getElementsByTagName("EmployeeRatesLevelA"), wo Element DataSet. Oder Sie verwenden können
http://java.sun.com/javase/6/docs/api/org/w3c/dom/Node.html#getChildNodes()
dann der filter alle childs, bis Sie finden die, die Sie wollen.
Ich Liebe groovy für diese Dinge, besonders wenn es ein ab zu laden Sachen in eine Datenbank:
http://groovy.codehaus.org/Reading+XML+mit+Groovy%27s+XmlSlurper