Lesen von XML-Dateien mit Java
Ich brauche zum Lesen eine XML-Datei mit java. Datei-Struktur, wie unten beschrieben.
<?xml version="1.0" encoding="UTF-8"?>
<xml_tool xmlns:md="http://www.example.com/XT/1.0/">
<md:header>
<md:application_version>1.0</md:application_version>
<md:export_date>19-04-2012</md:export_date>
<md:export_time>14:55</md:export_time>
<md:export_user>USER01</md:export_user>
</md:header>
<md:table table_name="CUSTOMER" key="customer number" record_count="2" column_count="5">
<md:record>
<md:column name="customer_number">123456</md:column>
<md:column name="reg_date">01-04-2012</md:column>
<md:column name="customer_name">Test Customer</md:column>
<md:column name="customer_type">Normal </md:column>
<md:column name="comments">This is a test record</md:column>
</md:record>
<md:record>
<md:column name="customer_number">555111</md:column>
<md:column name="reg_date">02-04-2012</md:column>
<md:column name="customer_name">Test Customer</md:column>
<md:column name="customer_type">VIP </md:column>
<md:column name="comments">This is a test record</md:column>
</md:record>
</md:table>
</xml_tool>
Habe ich gelesen, Gewusst wie: Lesen von XML-Datei in Java – (DOM Parser) Beispiel und versuchen, meine Arbeit zu tun. Aber ich bin nicht in der Lage zu Lesen XML-Datei erfolgreich.
Mein Code
try {
File fXmlFile = new File("c:\\file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("md:record");
for (int i = 0; i < nList.getLength(); i++) {
Node node = nList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node;
System.out.println(getTagValue("md:column", eElement));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
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();
}
und das Ergebnis ist
123456
555111
Wie konnte ich Lesen diese XML-Datei?
- Vielleicht können Sie näher auf '...ich bin nicht...'. Was hast du probiert und was funktioniert nicht (code)?
- ich aktualisiert meine Frage
- Leider das update nicht machen, deine Frage klarer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aktualisieren Sie Ihre for-Schleife...
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to org.w3c.dom.Element
auf ` Element el = (Element) nl.item(j);`getTagValue()
Methode.Derzeit tun sehr ungenaue Abfragen (nämlich
getElementsByTagName(...)
, die nicht nur first-level-Nachkommen). IngetTagValue(...)
können, benötigen Sie zum Durchlaufen derNodeList
um alle zu erhalten, die Daten für alle Kinder-in dem Fall, vielleicht Sie beabsichtigen, die Methode für die Rückgabe einerList<String>
. Oder, besser noch, verschieben Sie, dassNodeList
zu Ihren anderen Methode und Schleife über ihm.Erhalten Sie alle Daten, einschließlich der header, die Sie benötigen, um rekursiv iterieren über alle Elemente, beginnend mit dem root-Knoten.
Sagte, es gibt einen viel besseren Weg. Sie können JAXB binden von XML-schema, um Ihre POJO (plain-old-Java-object) - Daten-Modell. Dann alle die Aufladung erfolgt automatisch, und Sie können sich auf der Programm-Logik.