Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (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 von flashpixx
Code Tags
Geschrieben (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 von flashpixx
Code-Tags
Geschrieben

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

Geschrieben

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);

	}

}

Geschrieben

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);

	}

}

Geschrieben

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).

Geschrieben

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);

	}

}

Geschrieben

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...

Geschrieben (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 von flashpixx
Geschrieben


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

Geschrieben

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>   




Geschrieben (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 von flashpixx
Geschrieben

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.

Geschrieben

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

Geschrieben (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 von flashpixx
Geschrieben


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

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...