Hallo,
ich habe ganz frisch mit Java angefangen und wollte die Sprache anhand eines speziellen Projektes lernen. Mein Programm ließt ein XML File ein und gibt für mich relevante Daten aus.
Das Programm macht sogar das was es soll, allerdings habe ich das Gefühl, das ich ein paar Sachen zu oft wiederholen muss und das eventuell einfacher gehen könnte.
Vieleicht kann sich das ja mal ein Profi anschauen ?
Das dazu passende XML File habe ich angehängt.
Vielen Dank für eure Tipps.
ich habe ganz frisch mit Java angefangen und wollte die Sprache anhand eines speziellen Projektes lernen. Mein Programm ließt ein XML File ein und gibt für mich relevante Daten aus.
Das Programm macht sogar das was es soll, allerdings habe ich das Gefühl, das ich ein paar Sachen zu oft wiederholen muss und das eventuell einfacher gehen könnte.
Vieleicht kann sich das ja mal ein Profi anschauen ?
Java:
package apps;
// Auslesen eines Jira-XML
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLReaderTest {
public static void main(String argv[]) {
try {
// Einlesen des JIRA-XML Files
File file = new File("e:\\xml2.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
// Aufbau der Allgemeinen KOPF Informationen, die im JIRA XML mit
// dem Tag <item> eingeleitet werden
NodeList itemLst = doc.getElementsByTagName("item");
for (int s = 0; s < itemLst.getLength(); s++) {
Node itemNode = itemLst.item(s);
if (itemNode.getNodeType() == Node.ELEMENT_NODE) {
Element itemElmnt = (Element) itemNode;
// Ausgabe des JIRA Titels
NodeList titleElmntLst = itemElmnt
.getElementsByTagName("title");
Element tileElmnt = (Element) titleElmntLst.item(0);
NodeList tileNodeLst = tileElmnt.getChildNodes();
// Entfernen von HTML Elementen
System.out.println(((Node) tileNodeLst.item(0))
.getNodeValue().replaceAll("<p>|</p>|<br>|<br/>",
""));
// Ausgabe des Summarys
NodeList summaryElmntLst = itemElmnt
.getElementsByTagName("summary");
Element summaryElmnt = (Element) summaryElmntLst.item(0);
NodeList summaryNodeLst = summaryElmnt.getChildNodes();
System.out.println(((Node) summaryNodeLst.item(0))
.getNodeValue().replaceAll("<p>|</p>|<br>|<br/>",
""));
// Ausgabe der Description
NodeList descriptionElmntLst = itemElmnt
.getElementsByTagName("description");
Element descriptionElmnt = (Element) descriptionElmntLst
.item(0);
NodeList descriptionNodeLst = descriptionElmnt
.getChildNodes();
System.out.println(((Node) descriptionNodeLst.item(0))
.getNodeValue().replaceAll("<p>|</p>|<br>|<br/>",
""));
}
// Aufbau der Commentsfelder. Da dieses Mehrfach vorhanden sein
// können wird eine For Schleife gebraucht bis
// alle Kommentare angezeigt sind.
NodeList commentsLst = doc.getElementsByTagName("comments");
for (s = 0; s < commentsLst.getLength(); s++) {
Node fstNode = commentsLst.item(s);
if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
Element fstElmnt = (Element) fstNode;
NodeList commentsElmntLst = fstElmnt
.getElementsByTagName("comment");
for (int z = 0; z < commentsElmntLst.getLength(); z++) {
Element commentsElmnt = (Element) commentsElmntLst
.item(z);
NodeList comment = commentsElmnt.getChildNodes();
System.out.println(((Node) comment.item(0))
.getNodeValue().replaceAll(
"<p>|</p>|<br>|<br/>", ""));
}
}
}
// Aufbau der Customfields von JIRA. Hier sind wichtige
// informationen vorhanden.
// Leider liefert das Customfield "Time in Status" kein
// <customfieldvalue>,
// deshalb muss eine Abfrage vorhanden sein
NodeList customfieldsLst = doc
.getElementsByTagName("customfields");
for (s = 0; s < commentsLst.getLength(); s++) {
Node customfieldsNode = customfieldsLst.item(s);
if (customfieldsNode.getNodeType() == Node.ELEMENT_NODE) {
Element customfieldsElmnt = (Element) customfieldsNode;
// Zu jedem Customfieldname z.B. "Transport_1" gibt es
// ein Customfieldvalue z.B. "D02K902010"
NodeList customFieldNamesLst = customfieldsElmnt
.getElementsByTagName("customfieldname");
NodeList customFieldValuesLst = customfieldsElmnt
.getElementsByTagName("customfieldvalue");
for (int z = 0; z < customFieldNamesLst.getLength(); z++) {
Element customFieldNamesElmnt = (Element) customFieldNamesLst
.item(z);
Element customFieldValuesElmnt = (Element) customFieldValuesLst
.item(z);
NodeList customFieldName = customFieldNamesElmnt
.getChildNodes();
// Für das Customfield "Time in Status liefert das
// XML File kein value. Deshalb die Abfrage um DUMP
// zu vermeiden
if (customFieldName.item(0).getNodeValue()
.equals("Time in Status")) {
break;
}
NodeList customFieldValue = customFieldValuesElmnt
.getChildNodes();
System.out.println(((Node) customFieldName.item(0))
.getNodeValue().replaceAll(
"<p>|</p>|<br>|<br/>", "")
+ " "
+ ((Node) customFieldValue.item(0))
.getNodeValue().replaceAll(
"<p>|</p>|<br>|<br/>", ""));
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Das dazu passende XML File habe ich angehängt.
Vielen Dank für eure Tipps.