Hallo,
ich hoffe sehr, dass sie mir helfen können.
Ich muss einen DOM Parser implementieren, der folgendes xml-Dokument einliest:
[xml]
<?xmlversion="1.0"encoding="UTF-8"?>
<Studentendaten>
<Student>
<Name>
<Anrede>Herr</Anrede>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
</Name>
<Matrikelnummer>12345678</Matrikelnummer>
<Anschrift>
<Strasse>Waldstrasse</Strasse>
<Hausnummer>125</Hausnummer>
<Ort>Berlin</Ort>
<Plz>12345</Plz>
</Anschrift>
<LieferAnschrift>
<Strasse>Waldstrasse</Strasse>
<Hausnummer>100</Hausnummer>
<Ort>Berlin</Ort>
<Plz>12345</Plz>
</LieferAnschrift>
<Kontodaten>
<Kontonummer>123 456 789 00</Kontonummer>
<Blz>200 150 00</Blz>
<Kontoinhaber>Mustermann</Kontoinhaber>
</Kontodaten>
<Leistungsnachweis>
<Kurs>20400</Kurs>
<Note>1.0</Note>
<GesamtPunkte>100</GesamtPunkte>
<Datum>10.03.2015</Datum>
<AnzVersuche>1</AnzVersuche>
</Leistungsnachweis>
<SchriftlicheArbeitArt="Bachelorarbeit">
<Thema>Informationssysteme</Thema>
<Note>1,0</Note>
<Betreuer>Prof. Muster</Betreuer>
<Abgabedatum>20.04.2015</Abgabedatum>
</SchriftlicheArbeit>
<Anmerkung>Sonstiges...</Anmerkung>
</Student>
</Studentendaten>
[/xml]
Die Eingelesene Baumstruktur soll am Bildschirm ausgegeben werden, danach soll ein neuer Leistungsnachweis eingefügt werden, sowie die Kontodaten des Studenten geändert werden. Danach soll die geänderte Baumstruktur in einer xml-Datei gespeichert werden.
Folgenden Java-Code habe ich geschrieben:
Ich bekomme folgende Fehlermeldung:
java.lang.NullPointerException
at MyDOMParser.addLeistungsnachweis(MyDOMParser.java:81)
at MyDOMParser.main(MyDOMParser.java:124)
Wo liegt mein Fehler? Habe schon viel rumprobiert und komme da nicht weiter.
Vielen Dank im Voraus.
Grüße
Lena
ich hoffe sehr, dass sie mir helfen können.
Ich muss einen DOM Parser implementieren, der folgendes xml-Dokument einliest:
[xml]
<?xmlversion="1.0"encoding="UTF-8"?>
<Studentendaten>
<Student>
<Name>
<Anrede>Herr</Anrede>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
</Name>
<Matrikelnummer>12345678</Matrikelnummer>
<Anschrift>
<Strasse>Waldstrasse</Strasse>
<Hausnummer>125</Hausnummer>
<Ort>Berlin</Ort>
<Plz>12345</Plz>
</Anschrift>
<LieferAnschrift>
<Strasse>Waldstrasse</Strasse>
<Hausnummer>100</Hausnummer>
<Ort>Berlin</Ort>
<Plz>12345</Plz>
</LieferAnschrift>
<Kontodaten>
<Kontonummer>123 456 789 00</Kontonummer>
<Blz>200 150 00</Blz>
<Kontoinhaber>Mustermann</Kontoinhaber>
</Kontodaten>
<Leistungsnachweis>
<Kurs>20400</Kurs>
<Note>1.0</Note>
<GesamtPunkte>100</GesamtPunkte>
<Datum>10.03.2015</Datum>
<AnzVersuche>1</AnzVersuche>
</Leistungsnachweis>
<SchriftlicheArbeitArt="Bachelorarbeit">
<Thema>Informationssysteme</Thema>
<Note>1,0</Note>
<Betreuer>Prof. Muster</Betreuer>
<Abgabedatum>20.04.2015</Abgabedatum>
</SchriftlicheArbeit>
<Anmerkung>Sonstiges...</Anmerkung>
</Student>
</Studentendaten>
[/xml]
Die Eingelesene Baumstruktur soll am Bildschirm ausgegeben werden, danach soll ein neuer Leistungsnachweis eingefügt werden, sowie die Kontodaten des Studenten geändert werden. Danach soll die geänderte Baumstruktur in einer xml-Datei gespeichert werden.
Folgenden Java-Code habe ich geschrieben:
Java:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class MyDOMParser {
private static void printNodes(NodeList nodelist) {
Node tmpNode, node;
NamedNodeMap nodeMap;
for (int i = 0; i < nodelist.getLength(); i++) {
tmpNode = nodelist.item(i);
if (tmpNode.getNodeType() == Node.ELEMENT_NODE) {
if (tmpNode.getChildNodes().getLength() == 1)
System.out.println(tmpNode.getNodeName() + ": "
+ tmpNode.getTextContent());
else
System.out.println("\n " + tmpNode.getNodeName() + "\n");
if (tmpNode.hasAttributes()) {
nodeMap = tmpNode.getAttributes();
for (int j = 0; j < nodeMap.getLength(); j++) {
node = nodeMap.item(j);
System.out.println(node.getNodeName() + ": "
+ node.getNodeValue());
}
}
}
if (tmpNode.hasChildNodes())
printNodes(tmpNode.getChildNodes());
}
}
private static void addLeistungsnachweis(Document doc, String KursNr,
String Erg, String GesPunkte, String Dat, String Ver) {
Element Kurs = doc.createElement("Kurs");
Element Note = doc.createElement("Note");
Element GesamtPunkte = doc.createElement("GesamtPunkte");
Element Datum = doc.createElement("Datum");
Element AnzVersuche = doc.createElement("AnzVersuche");
Note.appendChild(doc.createTextNode(Erg));
GesamtPunkte.appendChild(doc.createTextNode(GesPunkte));
Datum.appendChild(doc.createTextNode(Dat));
AnzVersuche.appendChild(doc.createTextNode(Ver));
Kurs.appendChild(Note);
Kurs.appendChild(GesamtPunkte);
Kurs.appendChild(Datum);
Kurs.appendChild(AnzVersuche);
Node Leistungsnachweis =
doc.getElementsByTagName("Leistungsnachweise").item(0);
Leistungsnachweis.appendChild(Kurs);
}
private static void changeKontodaten(Document doc, String Inhaber,
String KntNr, String BLZ) {
Node Kontodaten = doc.getElementsByTagName("Kontodaten").item(0);
NamedNodeMap attr = Kontodaten.getAttributes();
Node nodeAttr = attr.getNamedItem("Inhaber");
nodeAttr.setNodeValue(Inhaber);
Node KontoNr = doc.getElementsByTagName("KntNr").item(0);
KontoNr.setNodeValue(KntNr);
Node blz = doc.getElementsByTagName("BLZ").item(0);
blz.setNodeValue(BLZ);
}
public static void main(String[] args) {
try {
File xmlFile = new File(
"/EA 3.4/src/NewFile.xml");
// Ziel für neuen XML-File
File xmlFileTarget = new File(
"/EA 3.4/src/NewFile_new.xml");
DocumentBuilderFactory dbfactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbfactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
System.out.println("XML-Dokument "
+ doc.getDocumentElement().getNodeName());
System.out.println("-------------------------------");
if (doc.hasChildNodes())
printNodes(doc.getChildNodes());
// neuen Leistungsnachweis einfügen
addLeistungsnachweis(doc, "01770", "1.7", "88", "23.09.2014", "1");
// Kontodaten ändern
changeKontodaten(doc, "Hans Muster", "9876543", "250 100 20");
printNodes(doc.getChildNodes());
// Datei als XML-file speichern
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(xmlFileTarget);
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ich bekomme folgende Fehlermeldung:
java.lang.NullPointerException
at MyDOMParser.addLeistungsnachweis(MyDOMParser.java:81)
at MyDOMParser.main(MyDOMParser.java:124)
Wo liegt mein Fehler? Habe schon viel rumprobiert und komme da nicht weiter.
Vielen Dank im Voraus.
Grüße
Lena
Zuletzt bearbeitet: