dimanche 17 mai 2015

DOM Parser Implementieren

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 [FONT=Monaco]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 Code:

  1. import java.io.File;
  2.  
  3. import javax.xml.parsers.DocumentBuilder;
  4. import javax.xml.parsers.DocumentBuilderFactory;
  5. import javax.xml.transform.Transformer;
  6. import javax.xml.transform.TransformerFactory;
  7. import javax.xml.transform.dom.DOMSource;
  8. import javax.xml.transform.stream.StreamResult;
  9.  
  10.  
  11. import org.w3c.dom.Document;
  12. import org.w3c.dom.Element;
  13. import org.w3c.dom.NamedNodeMap;
  14. import org.w3c.dom.Node;
  15. import org.w3c.dom.NodeList;
  16.  
  17.  
  18. public class MyDOMParser {
  19.  
  20.  
  21. private static void printNodes(NodeList nodelist) {
  22.  
  23.  
  24. Node tmpNode, node;
  25. NamedNodeMap nodeMap;
  26.  
  27.  
  28. for (int i = 0; i < nodelist.getLength(); i++) {
  29. tmpNode = nodelist.item(i);
  30. if (tmpNode.getNodeType() == Node.ELEMENT_NODE) {
  31. if (tmpNode.getChildNodes().getLength() == 1)
  32.  
  33.  
  34. System.out.println(tmpNode.getNodeName() + ": "
  35. + tmpNode.getTextContent());
  36. else
  37. System.out.println("\n " + tmpNode.getNodeName() + "\n");
  38. if (tmpNode.hasAttributes()) {
  39. nodeMap = tmpNode.getAttributes();
  40. for (int j = 0; j < nodeMap.getLength(); j++) {
  41. node = nodeMap.item(j);
  42. System.out.println(node.getNodeName() + ": "
  43. + node.getNodeValue());
  44. }
  45. }
  46. }
  47.  
  48. if (tmpNode.hasChildNodes())
  49. printNodes(tmpNode.getChildNodes());
  50. }
  51.  
  52. }
  53.  
  54.  
  55. private static void addLeistungsnachweis(Document doc, String KursNr,
  56. String Erg, String GesPunkte, String Dat, String Ver) {
  57.  
  58. Element Kurs = doc.createElement("Kurs");
  59. Element Note = doc.createElement("Note");
  60. Element GesamtPunkte = doc.createElement("GesamtPunkte");
  61. Element Datum = doc.createElement("Datum");
  62. Element AnzVersuche = doc.createElement("AnzVersuche");
  63.  
  64.  
  65.  
  66.  
  67. Note.appendChild(doc.createTextNode(Erg));
  68. GesamtPunkte.appendChild(doc.createTextNode(GesPunkte));
  69. Datum.appendChild(doc.createTextNode(Dat));
  70. AnzVersuche.appendChild(doc.createTextNode(Ver));
  71.  
  72.  
  73. Kurs.appendChild(Note);
  74. Kurs.appendChild(GesamtPunkte);
  75. Kurs.appendChild(Datum);
  76. Kurs.appendChild(AnzVersuche);
  77.  
  78.  
  79. Node Leistungsnachweis =
  80. doc.getElementsByTagName("Leistungsnachweise").item(0);
  81. Leistungsnachweis.appendChild(Kurs);
  82. }
  83.  
  84.  
  85. private static void changeKontodaten(Document doc, String Inhaber,
  86. String KntNr, String BLZ) {
  87. Node Kontodaten = doc.getElementsByTagName("Kontodaten").item(0);
  88. NamedNodeMap attr = Kontodaten.getAttributes();
  89. Node nodeAttr = attr.getNamedItem("Inhaber");
  90. nodeAttr.setNodeValue(Inhaber);
  91. Node KontoNr = doc.getElementsByTagName("KntNr").item(0);
  92. KontoNr.setNodeValue(KntNr);
  93. Node blz = doc.getElementsByTagName("BLZ").item(0);
  94. blz.setNodeValue(BLZ);
  95. }
  96.  
  97.  
  98. public static void main(String[] args) {
  99. try {
  100. File xmlFile = new File(
  101. "/EA 3.4/src/NewFile.xml");
  102. // Ziel für neuen XML-File
  103.  
  104.  
  105. File xmlFileTarget = new File(
  106. "/EA 3.4/src/NewFile_new.xml");
  107. DocumentBuilderFactory dbfactory = DocumentBuilderFactory
  108. .newInstance();
  109. DocumentBuilder dBuilder = dbfactory.newDocumentBuilder();
  110. Document doc = dBuilder.parse(xmlFile);
  111. doc.getDocumentElement().normalize();
  112. System.out.println("XML-Dokument "
  113. + doc.getDocumentElement().getNodeName());
  114.  
  115.  
  116. System.out.println("-------------------------------");
  117. if (doc.hasChildNodes())
  118. printNodes(doc.getChildNodes());
  119.  
  120.  
  121. // neuen Leistungsnachweis einfügen
  122.  
  123.  
  124. addLeistungsnachweis(doc, "01770", "1.7", "88", "23.09.2014", "1");
  125.  
  126.  
  127. // Kontodaten ändern
  128.  
  129.  
  130. changeKontodaten(doc, "Hans Muster", "9876543", "250 100 20");
  131. printNodes(doc.getChildNodes());
  132.  
  133.  
  134. // Datei als XML-file speichern
  135.  
  136.  
  137. TransformerFactory transformerFactory = TransformerFactory
  138. .newInstance();
  139. Transformer transformer = transformerFactory.newTransformer();
  140. DOMSource source = new DOMSource(doc);
  141. StreamResult result = new StreamResult(xmlFileTarget);
  142. transformer.transform(source, result);
  143. } catch (Exception e) {
  144. e.printStackTrace();
  145. }
  146. }
  147.  
  148.  
  149.  
  150. }




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


DOM Parser Implementieren

0 commentaires:

Enregistrer un commentaire