iNvAsIoN Geschrieben 24. Juli 2012 Geschrieben 24. Juli 2012 (bearbeitet) XML <?xml version="1.0" encoding="UTF-8"?> <!-- XML Dokumet fuer JUNIT Testobjekte --> <!-- Test --> <test> <HL7_message> <value>10000001_6.hl7</value> <t_kis_fall> <hostcode>10000001</hostcode> <aufnahmedatum>14.07.2012 17:30</aufnahmedatum> <entlassdatum>16.07.2012</entlassdatum> <t_stamm_falltyp> <hostcode>I</hostcode> <pk>id</pk> <fk>falltyp_id</fk> </t_stamm_falltyp> <fallart_id>3</fallart_id> <t_stamm_aufnahmegrund> <hostcode>E</hostcode> <pk>id</pk> <fk>aufnahmegrund_id</fk> </t_stamm_aufnahmegrund> </t_kis_fall> <t_kis_patient> <hostcode>10001</hostcode> <vorname>Test</vorname> <geburtstag>08.06.2008</geburtstag> <t_stamm_geschlecht> <hostcode>M</hostcode> <pk>id</pk> <fk>geschlecht_id</fk> </t_stamm_geschlecht> </t_kis_patient> <t_kis_bewegung> <hostcode>100001</hostcode> <t_stamm_fachabteilung> <hostcode>CH_UO</hostcode> <pk>id</pk> <fk>fachabteilung_id</fk> </t_stamm_fachabteilung> <t_stamm_station> <hostcode>G5</hostcode> <pk>id</pk> <fk>station_id</fk> </t_stamm_station> <t_stamm_zimmer> <hostcode>141</hostcode> <pk>id</pk> <fk>zimmer_id</fk> </t_stamm_zimmer> <prev_id>0</prev_id> <next_id>0</next_id> <admit_movement>TRUE</admit_movement> <falltyp_id>I</falltyp_id> <von>14.07.2012 17:30</von> <bis>16.07.2012 11:00</bis> </t_kis_bewegung> <t_kis_fallanschrift> <vorname>Test</vorname> <name>Eins</name> <plz>63512</plz> <ort>Hainburg</ort> <strasse>Friedrich-Ebertstr.61</strasse> <telefon>06182-7700169 0176-98273371</telefon> </t_kis_fallanschrift> <t_kis_stationsaufenthalt> <hostcode>100001</hostcode> <von>14.07.2012 17:30</von> <bis>16.07.2012 11:00</bis> <prev_id>0</prev_id> <next_id>0</next_id> <t_stamm_falltyp> <hostcode>I</hostcode> <pk>id</pk> <fk>falltyp_id</fk> </t_stamm_falltyp> <admit_movement>TRUE</admit_movement> <t_stamm_station> <hostcode>222005F</hostcode> <pk>id</pk> <fk>station_id</fk> </t_stamm_station> <t_stamm_zimmer> <hostcode>141</hostcode> <pk>id</pk> <fk>zimmer_id</fk> </t_stamm_zimmer> </t_kis_stationsaufenthalt> <t_kis_fachabteilungsaufenthalt> <prev_id>0</prev_id> <next_id>0</next_id> <von>14.07.2012 17:30</von> <bis>16.07.2012 11:00</bis> <t_stamm_fachabteilung> <hostcode>CH_UO</hostcode> <pk>id</pk> <fk>fachabteilung_id</fk> </t_stamm_fachabteilung> </t_kis_fachabteilungsaufenthalt> </HL7_message> </test> <!-- Erste XML AUS DATENBANK Fertig , andere anpassen am Montag --> package PraktischeStudienphase; public class XMLAttributes { public String value = null; public String key = null; public String name = null; public String pk = null; public String fk = null; public XMLAttributes(String key, String value) { this.key = key; this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPk() { return pk; } public void setPk(String pk) { this.pk = pk; } public String getFk() { return fk; } public void setFk(String fk) { this.fk = fk; } } package PraktischeStudienphase; import java.util.List; public class XMLTable { String name = null; String pk = null; String fk = null; List<XMLAttributes> attributes = null; List<XMLTable> tables = null; public void AddAddtribute(String key, String value) { XMLAttributes attribute = new XMLAttributes(key, value); attributes.add(attribute); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPk() { return pk; } public void setPk(String pk) { this.pk = pk; } public String getFk() { return fk; } public void setFk(String fk) { this.fk = fk; } public List<XMLAttributes> getAttributes() { return attributes; } public void setAttributes(List<XMLAttributes> attributes) { this.attributes = attributes; } public List<XMLTable> getTables() { return tables; } public void setTables(List<XMLTable> tables) { this.tables = tables; } } DOMParser package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; import java.text.AttributedCharacterIterator.Attribute; public class XMLDOMParser { public static void main(String argv[]) { try { File fXmlFile = new File("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); NodeList tagliste=document.getElementsByTagName ("Vorname"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println(getTagValue("value",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(); } } Hallo ich moechte mit dem DOMParser ueber die Liste laufen und schauen ob der Tag kinder besitzt oder nicht , falls ja soll er nen neuen Table erstellen. falls nein soll er nen attribut hinzufuegen. Das problem ist , ich kenne die Tagnamen vorher nicht ,z.b. value.... t_kis_fall er muss das ganze dynamisch anhand der XML Struktur erkennen. ist dasmoeglich? Bearbeitet 24. Juli 2012 von flashpixx Code Tags Zitieren
flashpixx Geschrieben 24. Juli 2012 Geschrieben 24. Juli 2012 Du möchtest erst einmal Code-Tags verwenden und evtl kann Dir XSLT weiter helfen bzw. wort-case Du musst manuell prüfen Zitieren
iNvAsIoN Geschrieben 24. Juli 2012 Autor Geschrieben 24. Juli 2012 (bearbeitet) package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import java.io.File; public class XMLDOMParser { public void parseXML(String path) { try { File fXmlFile = new File(path); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); int temp = 0; Node nNode = nList.item(temp); for (temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { if (nNode.getChildNodes().item(temp).getNodeName() == "#text") { nNode.removeChild(nNode.getChildNodes().item(temp)); } System.out.println(nNode.getChildNodes().item(temp).getNodeName()); } System.out.println(nNode.getChildNodes().getLength()); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { XMLDOMParser xmlParser = new XMLDOMParser(); xmlParser.parseXML("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); } } Bearbeitet 24. Juli 2012 von flashpixx Code-Tags Zitieren
flashpixx Geschrieben 24. Juli 2012 Geschrieben 24. Juli 2012 Verwende die Code Tags bitte richtig Zitieren
iNvAsIoN Geschrieben 25. Juli 2012 Autor Geschrieben 25. Juli 2012 Zur Zeit sieht meine Ausgabe folgendermassen aus: Root element :test ----------------------- value t_kis_fall t_kis_patient t_kis_bewegung t_kis_fallanschrift t_kis_stationsaufenthalt t_kis_fachabteilungsaufenthalt 7 was ich braeuchte sind zusaetzlich die kinderknoten und die kinder der kinder usw.... die #text habe ich geloescht... sonst kommt zu jedem knoten noch der #text knoten , weil jeder knoten ja noch einen #text knoten hat. Wisst ihr wie ich die Kinderknoten ausgeben lassen kann usw? MfG inva Zitieren
flashpixx Geschrieben 25. Juli 2012 Geschrieben 25. Juli 2012 Wisst ihr wie ich die Kinderknoten ausgeben lassen kann usw? Steig rekursiv bei der Node ab, bei der Du die Kindelemente brauchst Zitieren
iNvAsIoN Geschrieben 25. Juli 2012 Autor Geschrieben 25. Juli 2012 Hi, ja ist die Grundidee...bekomme allerdings bei diesem Vorgehen immer NULLPointerexceptions usw. hast du ne idee was ich abaendern muss? package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; public class XMLDOMParser { public File XMLFile; public DocumentBuilderFactory dbFactory; public Document doc; public DocumentBuilder dBuilder; public NodeList nList; public static Node nNode; public static int temp = 0; public static int count = -1; public XMLDOMParser(String path) throws ParserConfigurationException, SAXException, IOException { XMLFile = new File(path); dbFactory = DocumentBuilderFactory.newInstance(); dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(XMLFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); nNode = nList.item(temp); for (temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { if (nNode.getChildNodes().item(temp).getNodeName() == "#text") { nNode.removeChild(nNode.getChildNodes().item(temp)); } } } public void parseXML(Node nNode) { try { if (nNode.getChildNodes().item(temp).hasChildNodes()) { System.out.println(nNode.getChildNodes().item(temp).getNodeName()); } if (nNode.getChildNodes().item(temp).getChildNodes().item(temp).hasChildNodes()) { System.out.println(nNode.getChildNodes().item(temp).getFirstChild().getNodeValue()); } temp = temp + 2; // if(nNode.getChildNodes().item(1).hasChildNodes()) // { // parseXML(nNode.getFirstChild()); // } // parseXML(nNode.getFirstChild()); // if(nNode.getChildNodes().item(temp).hasChildNodes()) // { // nNode=nNode.getChildNodes().item(temp).getFirstChild(); // parseXML(nNode); // } /* * for (temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { * * if (nNode.getChildNodes().item(temp).getNodeName() == "#text") { * nNode.removeChild(nNode.getChildNodes().item(temp)); } * * System.out.println(nNode.getChildNodes().item(temp).getNodeName()); * * } */ // System.out.println(nNode.getChildNodes().getLength() - 1); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { XMLDOMParser xmlParser = new XMLDOMParser("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); xmlParser.parseXML(nNode); } } Zitieren
iNvAsIoN Geschrieben 25. Juli 2012 Autor Geschrieben 25. Juli 2012 sry falscher code package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; public class XMLDOMParser { public File XMLFile; public DocumentBuilderFactory dbFactory; public Document doc; public DocumentBuilder dBuilder; public NodeList nList; public static Node nNode; public static int temp = 0; public static int count; public XMLDOMParser(String path) throws ParserConfigurationException, SAXException, IOException { XMLFile = new File(path); dbFactory = DocumentBuilderFactory.newInstance(); dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(XMLFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); nNode = nList.item(temp); for (count = 0; count < nNode.getChildNodes().getLength() - 1; count++) { if (nNode.getChildNodes().item(count).getNodeName() == "#text") { nNode.removeChild(nNode.getChildNodes().item(count)); } } } public void parseXML(Node nNode) { try { if (nNode.getChildNodes().item(temp).hasChildNodes()) { System.out.println(nNode.getChildNodes().item(temp).getNodeName()); } if (nNode.getChildNodes().item(temp).getChildNodes().item(temp).hasChildNodes()) { System.out.println(nNode.getChildNodes().item(temp).getFirstChild().getNodeValue()); } temp=temp+1; parseXML(nNode); // if(nNode.getChildNodes().item(1).hasChildNodes()) // { // parseXML(nNode.getFirstChild()); // } // parseXML(nNode.getFirstChild()); // if(nNode.getChildNodes().item(temp).hasChildNodes()) // { // nNode=nNode.getChildNodes().item(temp).getFirstChild(); // parseXML(nNode); // } /* * for (temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { * * if (nNode.getChildNodes().item(temp).getNodeName() == "#text") { * nNode.removeChild(nNode.getChildNodes().item(temp)); } * * System.out.println(nNode.getChildNodes().item(temp).getNodeName()); * * } */ // System.out.println(nNode.getChildNodes().getLength() - 1); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { XMLDOMParser xmlParser = new XMLDOMParser("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); xmlParser.parseXML(nNode); } } Zitieren
flashpixx Geschrieben 25. Juli 2012 Geschrieben 25. Juli 2012 Rekursion Bei einer rekursiven Definition einer Funktion f ruft sich die Funktion so oft selbst auf, bis eine durch den Aufruf der Funktion veränderte Variable einen vorgegebenen Zielwert erreicht oder Grenzwert überschritten hat (Terminierung, Abbruchbedingung). Zitieren
iNvAsIoN Geschrieben 25. Juli 2012 Autor Geschrieben 25. Juli 2012 Was rekursion ist ist klar... package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; public class XMLDOMParser { public File XMLFile; public DocumentBuilderFactory dbFactory; public Document doc; public DocumentBuilder dBuilder; public NodeList nList; public static Node nNode; public static int temp = 0; public static int count; int helpcount = 0; public XMLDOMParser(String path) throws ParserConfigurationException, SAXException, IOException { XMLFile = new File(path); dbFactory = DocumentBuilderFactory.newInstance(); dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(XMLFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); nNode = nList.item(temp); } public void remove_textTags(Node nNode) { if (nNode.getNodeName().equals("#text")) { nNode.getParentNode().removeChild(nNode); return; } for (int temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { remove_textTags(nNode.getChildNodes().item(temp)); } } public void parseXML(Node nNode) { try { for (int temp = 0; temp < nNode.getChildNodes().getLength(); temp++) { if(nNode.getChildNodes().item(temp).hasChildNodes()) { System.out.println("Tag: " + nNode.getChildNodes().item(temp).getNodeName()); } if (!nNode.getChildNodes().item(temp).hasChildNodes()) { System.out.println("Value: " + (nNode.getChildNodes().item(temp).getNodeValue())); } parseXML(nNode.getChildNodes().item(temp)); } /* * if (nNode.getChildNodes().item(helpcount).hasChildNodes()) { * System.out.println(nNode.getChildNodes().item(helpcount).getNodeName()); * System.out.println * (nNode.getChildNodes().item(temp).getChildNodes().item(0).getNodeValue()); * helpcount++; // parseXML(nNode); * * } if (!nNode.getChildNodes().item(temp).getChildNodes().item(temp).hasChildNodes()) { * System.out.println(nNode.getChildNodes().item(temp).getLastChild().getNodeValue()); } * temp = temp + 1; */ // if(nNode.getChildNodes().item(1).hasChildNodes()) // { // parseXML(nNode.getFirstChild()); // } // parseXML(nNode.getFirstChild()); // if(nNode.getChildNodes().item(temp).hasChildNodes()) // { // nNode=nNode.getChildNodes().item(temp).getFirstChild(); // parseXML(nNode); // } /* * for (temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { * * if (nNode.getChildNodes().item(temp).getNodeName() == "#text") { * nNode.removeChild(nNode.getChildNodes().item(temp)); } * * System.out.println(nNode.getChildNodes().item(temp).getNodeName()); * * } */ // System.out.println(nNode.getChildNodes().getLength() - 1); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { XMLDOMParser xmlParser = new XMLDOMParser("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); xmlParser.remove_textTags(nNode); xmlParser.parseXML(nNode); } } Zitieren
flashpixx Geschrieben 25. Juli 2012 Geschrieben 25. Juli 2012 Was rekursion ist ist klar... Nein, sonst würdest Du Deinen Code einmal prüfen, ob Du das, was ich Dir als relevanten Hinweis aus dem Wikiartikel zitiert habe, korrekt erfüllt ist. Zitieren
iNvAsIoN Geschrieben 25. Juli 2012 Autor Geschrieben 25. Juli 2012 Doch was rekursion ist ist klar, die Abbruchbedingung stimmt noch nicht ... das ist das Problem aber ich weiss nicht wie ichs aendern soll:) Zitieren
flashpixx Geschrieben 25. Juli 2012 Geschrieben 25. Juli 2012 Überlege Dir was eine Nullpointerexception bedeutet, male Dir ein kleines Beispiel auf Papier und gehe anhand des Beispieles Deinen Quellcode exakt so durch, wie er programmiert ist. Zitieren
iNvAsIoN Geschrieben 25. Juli 2012 Autor Geschrieben 25. Juli 2012 Ja , ich weiss jetzt woran es haengt ...danke:) Leider weiss ich noch nicht wie ich das loesen soll....habs ja jetzt rekursiv....allerdings..... wenn ich an nem Knoten angelangt bin der nen TextTag ist. hat er keine kinder und er spuckt Value : nochmal aus.... Ausgabe: Root element :test ----------------------- Tag : value Value: 10000001_6.hl7 Tag : t_kis_fall Value: Tag : hostcode Value: 10000001 Value: Tag : aufnahmedatum Value: 14.07.2012 17:30 Value: Tag : entlassdatum Value: 16.07.2012 Value: Tag : t_stamm_falltyp Value: Tag : hostcode Value: I Value: Tag : pk Value: id Value: Tag : fk Value: falltyp_id Value: Value: Tag : fallart_id Value: 3 Value: Tag : t_stamm_aufnahmegrund Value: Tag : hostcode Value: E Value: Tag : pk Value: id Value: Tag : fk Value: aufnahmegrund_id Value: Value: Tag : t_kis_patient Value: Tag : hostcode Value: 10001 Value: Tag : vorname Value: Test Value: Tag : geburtstag Value: 08.06.2008 Value: Tag : t_stamm_geschlecht Value: Tag : hostcode Value: M Value: Tag : pk Value: id Value: Tag : fk Value: geschlecht_id Value: Value: Tag : t_kis_bewegung Value: Tag : hostcode Value: 100001 Value: Tag : t_stamm_fachabteilung Value: Tag : hostcode Value: CH_UO Value: Tag : pk Value: id Value: Tag : fk Value: fachabteilung_id Value: Value: Tag : t_stamm_station Value: Tag : hostcode Value: G5 Value: Tag : pk Value: id Value: Tag : fk Value: station_id Value: Value: Tag : t_stamm_zimmer Value: Tag : hostcode Value: 141 Value: Tag : pk Value: id Value: Tag : fk Value: zimmer_id Value: Value: Tag : prev_id Value: 0 Value: Tag : next_id Value: 0 Value: Tag : admit_movement Value: TRUE Value: Tag : falltyp_id Value: I Value: Tag : von Value: 14.07.2012 17:30 Value: Tag : bis Value: 16.07.2012 11:00 Value: Tag : t_kis_fallanschrift Value: Tag : vorname Value: Test Value: Tag : name Value: Eins Value: Tag : plz Value: 63512 Value: Tag : ort Value: Hainburg Value: Tag : strasse Value: Friedrich-Ebertstr.61 Value: Tag : telefon Value: 06182-7700169 0176-98273371 Value: Tag : t_kis_stationsaufenthalt Value: Tag : hostcode Value: 100001 Value: Tag : von Value: 14.07.2012 17:30 Value: Tag : bis Value: 16.07.2012 11:00 Value: Tag : prev_id Value: 0 Value: Tag : next_id Value: 0 Value: Tag : t_stamm_falltyp Value: Tag : hostcode Value: I Value: Tag : pk Value: id Value: Tag : fk Value: falltyp_id Value: Value: Tag : admit_movement Value: TRUE Value: Tag : t_stamm_station Value: Tag : hostcode Value: 222005F Value: Tag : pk Value: id Value: Tag : fk Value: station_id Value: Value: Tag : t_stamm_zimmer Value: Tag : hostcode Value: 141 Value: Tag : pk Value: id Value: Tag : fk Value: zimmer_id Value: Value: Tag : t_kis_fachabteilungsaufenthalt Value: Tag : prev_id Value: 0 Value: Tag : next_id Value: 0 Value: Tag : von Value: 14.07.2012 17:30 Value: Tag : bis Value: 16.07.2012 11:00 Value: Tag : t_stamm_fachabteilung Value: Tag : hostcode Value: CH_UO Value: Tag : pk Value: id Value: Tag : fk Value: fachabteilung_id Value: Value: Value: wegen dem : if (!nNode.getChildNodes().item(temp).hasChildNodes()) { System.out.println("Value: " + (nNode.getChildNodes().item(temp).getNodeValue())); } hmmmmmmm...... da wird mir rekursion zum verhaengnis ein bisschen. vllt i-wo nen return rein... Zitieren
flashpixx Geschrieben 25. Juli 2012 Geschrieben 25. Juli 2012 (bearbeitet) Ja , ich weiss jetzt woran es haengt ...danke:) Leider weiss ich noch nicht wie ich das loesen soll....habs ja jetzt rekursiv....allerdings..... wenn ich an nem Knoten angelangt bin der nen TextTag ist. hat er keine kinder und er spuckt Value : nochmal aus.... [...] hmmmmmmm...... da wird mir rekursion zum verhaengnis ein bisschen. vllt i-wo nen return rein... Du musst die Abbruchbedingung richtig (!!!!!) formulieren, das ist nicht damit getan, einfach irgendwo ein return zu setzen. Verstehe Deinen Code, verstehe die Struktur von Rekursionen und verstehe, wie der XML Parser arbeitet (XML ist gerade rekursiv). Du musst nur Deine Abbruchbedingung an der richtigen Stelle richtig formulieren. Bearbeitet 25. Juli 2012 von flashpixx Zitieren
iNvAsIoN Geschrieben 26. Juli 2012 Autor Geschrieben 26. Juli 2012 package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; import java.util.ArrayList; public class XMLDOMParser { public File XMLFile; public DocumentBuilderFactory dbFactory; public Document doc; public DocumentBuilder dBuilder; public NodeList nList; public static Node nNode; public static int temp = 0; public XMLDOMParser(String path) throws ParserConfigurationException, SAXException, IOException { XMLFile = new File(path); dbFactory = DocumentBuilderFactory.newInstance(); dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(XMLFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); nNode = nList.item(temp); } static ArrayList<Node> list = new ArrayList<Node>(); /*public void remove_textTags(Node nNode) { if (nNode.getNodeName().equals("#text")) { list.add(nNode); } if (nNode.hasChildNodes()) { for (int temp = 0; temp < nNode.getChildNodes().getLength(); temp++) { Node current = nNode.getChildNodes().item(temp); remove_textTags(current); } } }*/ public void parseXML(Node nNode) { try { for (int temp = 0; temp < nNode.getChildNodes().getLength(); temp++) { if (nNode.getChildNodes().item(temp).hasChildNodes()) { System.out.println("Tag : " + nNode.getChildNodes().item(temp).getNodeName()); parseXML(nNode.getChildNodes().item(temp)); } if(!nNode.getChildNodes().item(temp).hasChildNodes()&&nNode.getNodeType()!=nNode.TEXT_NODE) { System.out.println("Value: "+ (nNode.getChildNodes().item(temp).getNodeValue())); } } /*for (int temp = 0; temp < nNode.getChildNodes().getLength(); temp++) { if (!nNode.getChildNodes().item(temp).hasChildNodes()&&nNode.getNodeType()!=nNode.TEXT_NODE) { // System.out.println("Type: "+ nNode.TEXT_NODE + ":" + // (nNode.getChildNodes().item(temp).getNodeType())); // System.out.println(Short.compare(nNode.TEXT_NODE, // (nNode.getChildNodes().item(temp).getNodeType()))); System.out.println("Value: "+ (nNode.getChildNodes().item(temp).getNodeValue())); } if (nNode.getChildNodes().item(temp).hasChildNodes()) { System.out.println("Tag : " + nNode.getChildNodes().item(temp).getNodeName()); parseXML(nNode.getChildNodes().item(temp)); // } } * if (nNode.getChildNodes().item(helpcount).hasChildNodes()) { * System.out.println(nNode.getChildNodes().item(helpcount).getNodeName()); * System.out.println * (nNode.getChildNodes().item(temp).getChildNodes().item(0).getNodeValue()); helpcount++; * // parseXML(nNode); * * } if (!nNode.getChildNodes().item(temp).getChildNodes().item(temp).hasChildNodes()) { * System.out.println(nNode.getChildNodes().item(temp).getLastChild().getNodeValue()); } * temp = temp + 1; // if(nNode.getChildNodes().item(1).hasChildNodes()) // { // parseXML(nNode.getFirstChild()); // } // parseXML(nNode.getFirstChild()); // if(nNode.getChildNodes().item(temp).hasChildNodes()) // { // nNode=nNode.getChildNodes().item(temp).getFirstChild(); // parseXML(nNode); // } for (temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { if (nNode.getChildNodes().item(temp).getNodeName() == "#text") { nNode.removeChild(nNode.getChildNodes().item(temp)); } System.out.println(nNode.getChildNodes().item(temp).getNodeName()); } */ // System.out.println(nNode.getChildNodes().getLength() - 1); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { XMLDOMParser xmlParser = new XMLDOMParser("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); //xmlParser.remove_textTags(nNode); for (Node node : list) node.getParentNode().removeChild(node); xmlParser.parseXML(nNode); } } ************************************************************* Console: Root element :test ----------------------- Value: Tag : value Value: 10000001_6.hl7 Value: Tag : t_kis_fall Value: Tag : hostcode Value: 10000001 Value: Tag : aufnahmedatum Value: 14.07.2012 17:30 Value: Tag : entlassdatum Value: 16.07.2012 Value: Tag : t_stamm_falltyp Value: Tag : hostcode Value: I Value: Tag : pk Value: id Value: Tag : fk Value: falltyp_id Value: Value: Tag : fallart_id Value: 3 Value: Tag : t_stamm_aufnahmegrund Value: Tag : hostcode Value: E Value: Tag : pk Value: id Value: Tag : fk Value: aufnahmegrund_id Value: Value: Value: Tag : t_kis_patient Value: Tag : hostcode Value: 10001 Value: Tag : vorname Value: Test Value: Tag : geburtstag Value: 08.06.2008 Value: Tag : t_stamm_geschlecht Value: Tag : hostcode Value: M Value: Tag : pk Value: id Value: Tag : fk Value: geschlecht_id Value: Value: Value: Tag : t_kis_bewegung Value: Tag : hostcode Value: 100001 Value: Tag : t_stamm_fachabteilung Value: Tag : hostcode Value: CH_UO Value: Tag : pk Value: id Value: Tag : fk Value: fachabteilung_id Value: Value: Tag : t_stamm_station Value: Tag : hostcode Value: G5 Value: Tag : pk Value: id Value: Tag : fk Value: station_id Value: Value: Tag : t_stamm_zimmer Value: Tag : hostcode Value: 141 Value: Tag : pk Value: id Value: Tag : fk Value: zimmer_id Value: Value: Tag : prev_id Value: 0 Value: Tag : next_id Value: 0 Value: Tag : admit_movement Value: TRUE Value: Tag : falltyp_id Value: I Value: Tag : von Value: 14.07.2012 17:30 Value: Tag : bis Value: 16.07.2012 11:00 Value: Value: Tag : t_kis_fallanschrift Value: Tag : vorname Value: Test Value: Tag : name Value: Eins Value: Tag : plz Value: 63512 Value: Tag : ort Value: Hainburg Value: Tag : strasse Value: Friedrich-Ebertstr.61 Value: Tag : telefon Value: 06182-7700169 0176-98273371 Value: Value: Tag : t_kis_stationsaufenthalt Value: Tag : hostcode Value: 100001 Value: Tag : von Value: 14.07.2012 17:30 Value: Tag : bis Value: 16.07.2012 11:00 Value: Tag : prev_id Value: 0 Value: Tag : next_id Value: 0 Value: Tag : t_stamm_falltyp Value: Tag : hostcode Value: I Value: Tag : pk Value: id Value: Tag : fk Value: falltyp_id Value: Value: Tag : admit_movement Value: TRUE Value: Tag : t_stamm_station Value: Tag : hostcode Value: 222005F Value: Tag : pk Value: id Value: Tag : fk Value: station_id Value: Value: Tag : t_stamm_zimmer Value: Tag : hostcode Value: 141 Value: Tag : pk Value: id Value: Tag : fk Value: zimmer_id Value: Value: Value: Tag : t_kis_fachabteilungsaufenthalt Value: Tag : prev_id Value: 0 Value: Tag : next_id Value: 0 Value: Tag : von Value: 14.07.2012 17:30 Value: Tag : bis Value: 16.07.2012 11:00 Value: Tag : t_stamm_fachabteilung Value: Tag : hostcode Value: CH_UO Value: Tag : pk Value: id Value: Tag : fk Value: fachabteilung_id Value: Value: Value: Warum gibt er mir immer nochmal Value : aus... :/ komme nicht weiter. Weiss nicht warum er nochmal in die if Abfrage reingeht.... Gruss inva Zitieren
iNvAsIoN Geschrieben 26. Juli 2012 Autor Geschrieben 26. Juli 2012 Hier die zugehoerige XML <?xml version="1.0" encoding="UTF-8"?> <!-- XML Dokumet fuer JUNIT Testobjekte --> <!-- Test --> <test> <HL7_message> <value>10000001_6.hl7</value> <t_kis_fall> <hostcode>10000001</hostcode> <aufnahmedatum>14.07.2012 17:30</aufnahmedatum> <entlassdatum>16.07.2012</entlassdatum> <t_stamm_falltyp> <hostcode>I</hostcode> <pk>id</pk> <fk>falltyp_id</fk> </t_stamm_falltyp> <fallart_id>3</fallart_id> <t_stamm_aufnahmegrund> <hostcode>E</hostcode> <pk>id</pk> <fk>aufnahmegrund_id</fk> </t_stamm_aufnahmegrund> </t_kis_fall> <t_kis_patient> <hostcode>10001</hostcode> <vorname>Test</vorname> <geburtstag>08.06.2008</geburtstag> <t_stamm_geschlecht> <hostcode>M</hostcode> <pk>id</pk> <fk>geschlecht_id</fk> </t_stamm_geschlecht> </t_kis_patient> <t_kis_bewegung> <hostcode>100001</hostcode> <t_stamm_fachabteilung> <hostcode>CH_UO</hostcode> <pk>id</pk> <fk>fachabteilung_id</fk> </t_stamm_fachabteilung> <t_stamm_station> <hostcode>G5</hostcode> <pk>id</pk> <fk>station_id</fk> </t_stamm_station> <t_stamm_zimmer> <hostcode>141</hostcode> <pk>id</pk> <fk>zimmer_id</fk> </t_stamm_zimmer> <prev_id>0</prev_id> <next_id>0</next_id> <admit_movement>TRUE</admit_movement> <falltyp_id>I</falltyp_id> <von>14.07.2012 17:30</von> <bis>16.07.2012 11:00</bis> </t_kis_bewegung> <t_kis_fallanschrift> <vorname>Test</vorname> <name>Eins</name> <plz>63512</plz> <ort>Hainburg</ort> <strasse>Friedrich-Ebertstr.61</strasse> <telefon>06182-7700169 0176-98273371</telefon> </t_kis_fallanschrift> <t_kis_stationsaufenthalt> <hostcode>100001</hostcode> <von>14.07.2012 17:30</von> <bis>16.07.2012 11:00</bis> <prev_id>0</prev_id> <next_id>0</next_id> <t_stamm_falltyp> <hostcode>I</hostcode> <pk>id</pk> <fk>falltyp_id</fk> </t_stamm_falltyp> <admit_movement>TRUE</admit_movement> <t_stamm_station> <hostcode>222005F</hostcode> <pk>id</pk> <fk>station_id</fk> </t_stamm_station> <t_stamm_zimmer> <hostcode>141</hostcode> <pk>id</pk> <fk>zimmer_id</fk> </t_stamm_zimmer> </t_kis_stationsaufenthalt> <t_kis_fachabteilungsaufenthalt> <prev_id>0</prev_id> <next_id>0</next_id> <von>14.07.2012 17:30</von> <bis>16.07.2012 11:00</bis> <t_stamm_fachabteilung> <hostcode>CH_UO</hostcode> <pk>id</pk> <fk>fachabteilung_id</fk> </t_stamm_fachabteilung> </t_kis_fachabteilungsaufenthalt> </HL7_message> </test> Zitieren
flashpixx Geschrieben 26. Juli 2012 Geschrieben 26. Juli 2012 (bearbeitet) Ein Thema = Ein Thread, halte Du Dich auch bitte daran. Darum habe ich die Thread zusammengeführt @topic: Das Problem lässt sich dadurch ebenfalls wieder lösen, dass Du Deinen Code verstehst ! Bearbeitet 26. Juli 2012 von flashpixx Zitieren
iNvAsIoN Geschrieben 26. Juli 2012 Autor Geschrieben 26. Juli 2012 Ja , aber stehe auf dem Schlauch dazu...anscheinend ueberseh ich was ....weiss jm wies geht? Zitieren
sas86ks Geschrieben 26. Juli 2012 Geschrieben 26. Juli 2012 Mit welcher IDE entwickelst du? Solltest du Eclipse benutzen schau dir mal den Debugging Modus an. Dort kann man Breakpoints setzen und Variablen Schritt für Schritt überwachen. MMn sehr hilfreich. Zitieren
iNvAsIoN Geschrieben 26. Juli 2012 Autor Geschrieben 26. Juli 2012 Hm ich entwickele mit Eclipse, ja Breakpoints schon gesetzt ... ein Problem waere geloest , allerdings das alte Problem von oben nicht.... um die Ausgabe mal als Baum zu sehen habe ich mit einer Ebenenvariable gearbeitet.... vielleicht hilft das um mir ein wenig zu helfen ....wenn ich jedoch die TEXT Nodes ausgeben lasse ....spuckt er mir so oft null aus und einfach " " leere Strings die ueber eine zeile gehen package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; import java.util.ArrayList; public class XMLDOMParser { public File XMLFile; public DocumentBuilderFactory dbFactory; public Document doc; public DocumentBuilder dBuilder; public NodeList nList; public static Node nNode; public static int temp = 0; public XMLDOMParser(String path) throws ParserConfigurationException, SAXException, IOException { XMLFile = new File(path); dbFactory = DocumentBuilderFactory.newInstance(); dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(XMLFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); nNode = nList.item(temp); } /* * static ArrayList<Node> list = new ArrayList<Node>(); * * * public void remove_textTags(Node nNode) { if (nNode.getNodeName().equals("#text")) { * list.add(nNode); } * * if (nNode.hasChildNodes()) { for (int temp = 0; temp < nNode.getChildNodes().getLength(); * temp++) { Node current = nNode.getChildNodes().item(temp); * * remove_textTags(current); } } */ // } // ELEMENT_NODE == TYPE 1 // TEXT_NODE == TYPE 3 public void parseXML(Node nNode, int ebene) { try { ebene++; // System.out.println("Ebene: " + ebene); for (int temp = 0; temp < nNode.getChildNodes().getLength(); temp++) { Node current = nNode.getChildNodes().item(temp); int type = current.getNodeType(); if (type == Node.ELEMENT_NODE) { // System.out.println("Ebene: " + ebene); if (ebene == 1) { System.out.println(current.getNodeName()); } if (ebene == 2) { System.out.println(" " + current.getNodeName()); } if (ebene == 3) { System.out.println(" " + current.getNodeName()); } if (ebene == 4) { System.out.println(" " + current.getNodeName()); } if (ebene == 5) { System.out.println(" " + current.getNodeName()); } } if (type == Node.TEXT_NODE) { /*if (ebene == 1&&nNode.getNodeValue()!=null) System.out.println(" " + nNode.getNodeValue()); if (ebene == 2&&nNode.getNodeValue()!=null) System.out.println(" " + nNode.getNodeValue()); if (ebene == 3&&nNode.getNodeValue()!=null) System.out.println(" " + nNode.getNodeValue()); if (ebene == 4&&nNode.getNodeValue()!=null) System.out.println(" " + nNode.getChildNodes().item(temp).getNodeValue()); if (ebene == 5&&nNode.getNodeValue()!=null) System.out.println(" " + nNode.getNodeValue()); */ } // System.out.println("Parent Value : " +current.getParentNode().getNodeValue()); // System.out.println("Current Type : " + current.getNodeType()); // System.out.println("Current Value : " + current.getNodeValue()); // if(current.getChildNodes().getLength() == 1 && // current.getFirstChild().getNodeName() == "#text") // { // // System.out.println("Ich bin ein Blatt!"); // } // /System.out.println("---------------"); // System.out.println(""); parseXML(current, ebene); } } /* * if (current.hasChildNodes()) { if (current.getNodeValue() == "#text") { continue; } if * (current.getNodeType() == Node.ELEMENT_NODE) { System.out.println("Tag : " + * current.getNodeName()); } else { System.out.println("Tag : " + current.getNodeValue()); * } parseXML(current); * * } else System.out.println("Value: " + current.getNodeValue()); */ // } /* * for (int temp = 0; temp < nNode.getChildNodes().getLength(); temp++) { * * if * (!nNode.getChildNodes().item(temp).hasChildNodes()&&nNode.getNodeType()!=nNode.TEXT_NODE * ) { System.out.println("Type: "+ nNode.TEXT_NODE + ":" + * (nNode.getChildNodes().item(temp).getNodeType())); * System.out.println(Short.compare(nNode.TEXT_NODE, * (nNode.getChildNodes().item(temp).getNodeType()))); System.out.println("Value: "+ * (nNode.getChildNodes().item(temp).getNodeValue())); } * * if (nNode.getChildNodes().item(temp).hasChildNodes()) { * * System.out.println("Tag : " + nNode.getChildNodes().item(temp).getNodeName()); * parseXML(nNode.getChildNodes().item(temp)); * * } } * * * * /* * * if (nNode.getChildNodes().item(helpcount).hasChildNodes()) { * System.out.println(nNode.getChildNodes().item(helpcount).getNodeName()); * System.out.println * (nNode.getChildNodes().item(temp).getChildNodes().item(0).getNodeValue()); helpcount++; * // parseXML(nNode); * * } if (!nNode.getChildNodes().item(temp).getChildNodes().item(temp).hasChildNodes()) { * System.out.println(nNode.getChildNodes().item(temp).getLastChild().getNodeValue()); } * temp = temp + 1; * * // if(nNode.getChildNodes().item(1).hasChildNodes()) // { // * parseXML(nNode.getFirstChild()); // } // parseXML(nNode.getFirstChild()); // * if(nNode.getChildNodes().item(temp).hasChildNodes()) // { // * nNode=nNode.getChildNodes().item(temp).getFirstChild(); // parseXML(nNode); // } * * * for (temp = 0; temp < nNode.getChildNodes().getLength() - 1; temp++) { * * if (nNode.getChildNodes().item(temp).getNodeName() == "#text") { * nNode.removeChild(nNode.getChildNodes().item(temp)); } * * System.out.println(nNode.getChildNodes().item(temp).getNodeName()); * * } */ // System.out.println(nNode.getChildNodes().getLength() - 1); catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { XMLDOMParser xmlParser = new XMLDOMParser("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); // xmlParser.remove_textTags(nNode); // for (Node node : list) // node.getParentNode().removeChild(node); // xmlParser.ausgabe(nNode); xmlParser.parseXML(nNode, 0); } } XML von oben! Ausgabe!ohne VALUES!...mit VALUES was auskommentiert ist ....kommen komische sachen raus Root element :test ----------------------- value t_kis_fall hostcode aufnahmedatum entlassdatum t_stamm_falltyp hostcode pk fk fallart_id t_stamm_aufnahmegrund hostcode pk fk t_kis_patient hostcode vorname geburtstag t_stamm_geschlecht hostcode pk fk t_kis_bewegung hostcode t_stamm_fachabteilung hostcode pk fk t_stamm_station hostcode pk fk t_stamm_zimmer hostcode pk fk prev_id next_id admit_movement falltyp_id von bis t_kis_fallanschrift vorname name plz ort strasse telefon t_kis_stationsaufenthalt hostcode von bis prev_id next_id t_stamm_falltyp hostcode pk fk admit_movement t_stamm_station hostcode pk fk t_stamm_zimmer hostcode pk fk t_kis_fachabteilungsaufenthalt prev_id next_id von bis t_stamm_fachabteilung hostcode pk fk Zitieren
flashpixx Geschrieben 26. Juli 2012 Geschrieben 26. Juli 2012 (bearbeitet) Generell solltest Du Deinen Code einmal wesentlich übersichtlicher gestallten, das hilft Dir, um ihn überhaupt zu verstehen. Das Einrücken ist auch so nicht sinnvoll, denn wenn Du wirklich einen Baum mal ausgeben lassen willst, würde ich (Pseudocode) so etwas nehmen function parse(Node x, int deep) { for(int i=0; i < deep; ++i) print "\t"; print x.nodename foreach (x.getChildnode as i) parse(i, deep + 1) } Damit sind Nodes gleicher Tiefe auch gleich eingerückt. Abbruchbedingung fehlt ebenfalls noch und eine Unterscheidung ob es sich um eine Textnode handelt. Du solltest Dir anhand eines kleinen Beispiels Deinen Code überlegen, damit Du überhaupt verstehst was Du da machst und wo Du innerhalb Deines Baums Dich befindest. Zusätzlich ist es hilfreich, wenn Du systematisch an das Problem herangehst, wenn Du mit Deinem jetzigen Code nicht erfolgreich bist, hilft es manchmal von vorne zu beginnen, d.h. alten Code löschen und noch einmal neu schreiben. Zu Deinem Code: if (ebene == 1) { System.out.println(current.getNodeName()); } if (ebene == 2) { System.out.println(" " + current.getNodeName()); } if (ebene == 3) { System.out.println(" " + current.getNodeName()); } if (ebene == 4) { System.out.println(" " + current.getNodeName()); } if (ebene == 5) { System.out.println(" " + current.getNodeName()); } ist absolut grauenvoll. Du scheinst switch-case nicht zu kennen und Du benötigst hier auch keine Klammern. Weiterhin kann ein XML Baum mehr als eine Tiefe von 5 haben. Weiterhin zu ebene++ parseXML(current, ebene); Du inkrementierst eine lokale Variable, bei Java ist alles eine Referenz, d.h. hier können Probleme auftreten. Warum übergibst Du nicht einfach den um 1 inkrementierten Wert in der Form und lässt ebene++ weg. parseXML(current, ebene+1); Strukturiere Deinen Code sinnvoll und entferne unnötige Fragmente, zusätzlich verwende die passenden Statements, damit Du selbst die Übersicht hast über das was Dein Code macht. Zusätzlich ist es hilfreich bei Problemen ein kleines Testcase mit einer Beispiel XML Datei aufzubauen. Erstelle eine kleine XML Datei und versuche zuerst diese einmal korrekt auszugeben. Bearbeitet 26. Juli 2012 von flashpixx Zitieren
iNvAsIoN Geschrieben 27. Juli 2012 Autor Geschrieben 27. Juli 2012 package PraktischeStudienphase; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; public class XMLDOMParser { public File XMLFile; public DocumentBuilderFactory dbFactory; public Document doc; public DocumentBuilder dBuilder; public NodeList nList; public static Node nNode; public static int temp = 0; public XMLDOMParser(String path) throws ParserConfigurationException, SAXException, IOException { XMLFile = new File(path); dbFactory = DocumentBuilderFactory.newInstance(); dbFactory.setIgnoringElementContentWhitespace(true); dbFactory.setIgnoringComments(true); dbFactory.setNamespaceAware(true); dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(XMLFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("HL7_message"); System.out.println("-----------------------"); nNode = nList.item(temp); } // ELEMENT_NODE == TYPE 1 // TEXT_NODE == TYPE 3 public void parseXML(Node nNode, int ebene, XMLTable table) { try { ebene++; // System.out.println("Ebene: " + ebene); for (int temp = 0; temp < nNode.getChildNodes().getLength(); temp++) { String buffer = " "; for(int i=0;i<ebene;i++) { buffer+=buffer + " "; } Node current = nNode.getChildNodes().item(temp); int type = current.getNodeType(); current.getChildNodes().getLength(); if(current.getNodeType()==Node.ELEMENT_NODE) { System.out.println(buffer + current.getNodeName()); } if(current.getNodeType()==Node.TEXT_NODE) { System.out.println(buffer + current.getNodeValue()); } if (!current.getNodeName().equals("#text")) { if (current.getChildNodes().getLength() == 1&& current.getFirstChild().getNodeName() == "#text") { //System.out.println("Last node!"); XMLAttributes attribute = new XMLAttributes(current.getNodeName(), current.getFirstChild().getNodeValue()); table.addAttribute(attribute); } else { //System.out.println("Table!"); XMLTable _table = new XMLTable(); _table.setName(current.getNodeName()); table.addTable(_table); parseXML(current, ebene, _table); } } //System.out.println("---------------"); //System.out.println(""); } } catch (Exception e) { e.printStackTrace(); } } public static void printTable(XMLTable table) { for (XMLTable t : table.getTables()) { System.out.println(t.getName()); printTable(t); } } public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { XMLDOMParser xmlParser = new XMLDOMParser("C:\\Users\\Pascal\\Desktop\\einfallfertig.xml"); XMLTable table = new XMLTable(); xmlParser.parseXML(nNode, 0, table); printTable(table); } } Ausgabe: Root element :test ----------------------- value //Hier die Whitespaces sollten eigentlich nicht hier sein wegen setIgnorewhitespaces(true) //Im netz habe ich gefunden das die trim() methode dies uebernehmen soll und ich muesste das vor dem lesen der Datei machen //hat leider nicht funktioniert t_kis_fall hostcode aufnahmedatum entlassdatum t_stamm_falltyp hostcode pk fk fallart_id t_stamm_aufnahmegrund hostcode pk fk t_kis_patient hostcode vorname geburtstag t_stamm_geschlecht hostcode pk fk t_kis_bewegung hostcode t_stamm_fachabteilung hostcode pk fk t_stamm_station hostcode pk fk t_stamm_zimmer hostcode pk fk prev_id next_id admit_movement falltyp_id von bis t_kis_fallanschrift vorname name plz ort strasse telefon t_kis_stationsaufenthalt hostcode von bis prev_id next_id t_stamm_falltyp hostcode pk fk admit_movement t_stamm_station hostcode pk fk t_stamm_zimmer hostcode pk fk t_kis_fachabteilungsaufenthalt prev_id next_id von bis t_stamm_fachabteilung hostcode pk fk //Das hier ist richtig t_kis_fall t_stamm_falltyp t_stamm_aufnahmegrund t_kis_patient t_stamm_geschlecht t_kis_bewegung t_stamm_fachabteilung t_stamm_station t_stamm_zimmer t_kis_fallanschrift t_kis_stationsaufenthalt t_stamm_falltyp t_stamm_station t_stamm_zimmer t_kis_fachabteilungsaufenthalt t_stamm_fachabteilung Zitieren
Klotzkopp Geschrieben 27. Juli 2012 Geschrieben 27. Juli 2012 Das ist meiner Meinung nach kein Whitespace, sondern Leerstring-Ausgaben. Offenbar gibt dir current.getNodeValue() nicht das, was du erwartest. Um das zu prüfen, könntest du an die Name- bzw. Value-Ausgaben noch ein Erkennungszeichen anhängen. Zitieren
flashpixx Geschrieben 27. Juli 2012 Geschrieben 27. Juli 2012 (bearbeitet) Anmerkung bezügl Switch-Case The switch Statement (The Java™ Tutorials > Learning the Java Language > Language Basics) Lass Dir doch einfach mal das XML komplett ausgeben mit entsprechende korrekter Einrückung, also den kompletten Baum mit Nodenames und Nodevalues, dann solltest Du sehen wo das Problem ist. Bearbeitet 27. Juli 2012 von flashpixx Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.