Heyi,
hab im Moment einen XML Beleg von einer Kommilitonin zur Kontrolle bei mir liegen.
Aufgabe war mit dem Java Programm die XML Dateien einzulesen, zu Ändern, neue Elemente hinzuzufügen und als HTML bzw PDF darzustellen.
Wenn man das Programm ausführt, in diesem Fall, ein neues Medikament hinzufügen möchte, bzw als HTML darstellen will, funktioniert dies nicht, da in die XML Datei nur der Header und ein leeres Wurzelelement geschrieben wird.
Da der Mensch, der den Quelltext geschrieben hat anscheinend nicht weiß wie ein Quelltext kommentiert wird, blicke ich absolut nicht durch

Ich hänge mal die Klasse ran in der der Fehler, meiner Meinung nach, sein muss.
Vielen Dank für schnelle Antworten, die Kommilitonin steht nämlich unter Zeitdruck weil sie ihn Montag (bzw eher Dienstag wegs Feiertag) abgeben muss

Achso, und zum Name vom Thema, hätt ich jetzt fast vergessen, der Schreiber des Quelltextes hat anscheinend sowohl DOM als auch SAX parser genutzt, da ich jetzt in dieser Thematik noch nich komplett belesen bin, wollt ich mal fragen ob das überhaupt möglich is beide zu nutzen wie es einem beliebt, oder ob es besser wäre sich für einen zu entscheiden, oder eventuell sogar der Fehler daran liegen könnte?
wäre super wenn sich hier jemand findet der helfen kann
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.swing.JList;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationExcept ion;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;
import org.apache.xerces.dom.DOMImplementationImpl;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class VerarbeitungMedizin {
private String NameMedikament = null;
private String Firma = null;
private String Form = null;
private String chemischerName = null;
private String Groesse = null;
private String Preis = null;
private ArrayList <String> Organe = new ArrayList<String>();
private ArrayList <String> Wirkungen = new ArrayList<String>();
private ArrayList <String> Nebenwirkungen = new ArrayList<String>();
private Datenhaltung dh = new Datenhaltung();
public void BearbeiteMedizin (String ID)
{
Document doc = dh.LadeMedizindaten();
for(int i = 0; i < doc.getChildNodes().item(0).getChildNodes().getLen gth(); i++)
{
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getNodeName().equals("Medikament"))
{
for(int l = 0; l < doc.getChildNodes().item(0).getChildNodes().item(i ).getAttributes().getLength(); l++)
{
if (doc.getChildNodes().item(0).getChildNodes().item( i).getAttributes().item(l).getTextContent().equals (ID))
{
for(int j = 0; j < doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().getLength(); j++)
{
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Name"))
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).setTextContent(NameMedik ament);
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Firma"))
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).setTextContent(Firma);
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Form"))
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).setTextContent(Form);
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "chemischer_Name"))
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).setTextContent(chemische rName);
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Packungsgröße"))
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).setTextContent(Groesse);
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Preis"))
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).setTextContent(Preis);
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Organe"))
{
/* NodeList Kinder = doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).getChildNodes();
for( int k = 0; k < Kinder.getLength(); k++)
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).removeChild(Kinder.item( k));
}
*/ while(doc.getChildNodes().item(0).getChildNodes(). item(i).getChildNodes().item(j).hasChildNodes())
{
Node Kind = doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).getChildNodes().item(0);
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).removeChild(Kind);
}
for(int k = 0; k < Organe.size(); k++)
{
Element Krankheit = doc.createElement("Organ");
Krankheit.setAttribute("id", (k+1)+"");
Krankheit.setTextContent(Organe.get(k));
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).appendChild(Krankheit);
}
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Wirkungen"))
{
/*
NodeList Kinder = doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).getChildNodes();
for( int k = 0; k < Kinder.getLength(); k++)
{
System.out.println("Löschen");
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).removeChild(Kinder.item( k));
}
*/
while(doc.getChildNodes().item(0).getChildNodes(). item(i).getChildNodes().item(j).hasChildNodes())
{
Node Kind = doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).getChildNodes().item(0);
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).removeChild(Kind);
}
System.out.println(doc.getChildNodes().item(0).get ChildNodes().item(i).getChildNodes().item(j).hasCh ildNodes());
for(int k = 0; k < Wirkungen.size(); k++)
{
Element Krankheit = doc.createElement("Wirkung");
Krankheit.setAttribute("id", (k+1)+"");
Krankheit.setTextContent(Wirkungen.get(k));
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).appendChild(Krankheit);
}
}
if(doc.getChildNodes().item(0).getChildNodes().ite m(i).getChildNodes().item(j).getNodeName().equals( "Nebenwirkungen"))
{
/* NodeList Kinder = doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).getChildNodes();
for( int k = 0; k < Kinder.getLength(); k++)
{
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).removeChild(Kinder.item( k));
}
*/ while(doc.getChildNodes().item(0).getChildNodes(). item(i).getChildNodes().item(j).hasChildNodes())
{
Node Kind = doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).getChildNodes().item(0);
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).removeChild(Kind);
}
for(int k = 0; k < Nebenwirkungen.size(); k++)
{
Element Krankheit = doc.createElement("Nebenwirkung");
Krankheit.setAttribute("id", (k+1)+"");
Krankheit.setTextContent(Nebenwirkungen.get(k));
doc.getChildNodes().item(0).getChildNodes().item(i ).getChildNodes().item(j).appendChild(Krankheit);
}
}
}
}
}
}
}
dh.SchreibeMedizindaten(doc);
}
public void SpeichereMedizin (String ID){
Document doc = dh.LadeMedizindaten();
if(doc.getChildNodes().item(0).getNodeName().equal s("Medikamente"))
{
Element Medikament = doc.createElement("Medikament");
Medikament.setAttribute("id", ID);
Element Name = doc.createElement("Name");
Name.setTextContent(NameMedikament);
Element Organe = doc.createElement("Organe");
for(int i = 0; i < this.Organe.size(); i++)
{
Element Organ = doc.createElement("Organ");
Organ.setAttribute("id", (i+1) + "");
Organ.setTextContent(this.Organe.get(i));
Organe.appendChild(Organ);
}
Element Wirkungen = doc.createElement("Wirkungen");
for(int i = 0; i < this.Wirkungen.size(); i++)
{
Element Organ = doc.createElement("Wirkung");
Organ.setAttribute("id", (i+1) + "");
Organ.setTextContent(this.Wirkungen.get(i));
Wirkungen.appendChild(Organ);
}
Element Firma = doc.createElement("Firma");
Firma.setTextContent(this.Firma);
Element chemischerName = doc.createElement("chemischer_Name");
chemischerName.setTextContent(this.chemischerName) ;
Element Form = doc.createElement("Form");
Form.setTextContent(this.Form);
Element Nebenwirkungen = doc.createElement("Nebenwirkungen");
for(int i = 0; i < this.Nebenwirkungen.size(); i++)
{
Element Organ = doc.createElement("Nebenwirkung");
Organ.setAttribute("id", (i+1) + "");
Organ.setTextContent(this.Nebenwirkungen.get(i));
Nebenwirkungen.appendChild(Organ);
}
Element Groesse = doc.createElement("Packungsgröße");
Groesse.setTextContent(this.Groesse);
Element Preis = doc.createElement("Preis");
Preis.setTextContent(this.Preis);
Medikament.appendChild(Name);
Medikament.appendChild(Organe);
Medikament.appendChild(Wirkungen);
Medikament.appendChild(Firma);
Medikament.appendChild(Form);
Medikament.appendChild(chemischerName);
Medikament.appendChild(Nebenwirkungen);
Medikament.appendChild(Groesse);
Medikament.appendChild(Preis);
doc.getChildNodes().item(0).appendChild(Medikament );
}
dh.SchreibeMedizindaten(doc);
}
public void LadeMedizin (String ID){
try {
Document doc = dh.LadeMedizindaten();
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression xpathEx ;
System.out.println("DaID"+ "\n" + ID);
xpathEx = xpath.compile("//Medikamente/Medikament[@id='"+ID+"']/*");
Object result = xpathEx.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++)
{
if(nodes.item(i).getNodeName().equals("Name"))
{
NameMedikament = (nodes.item(i).getTextContent());
}
if(nodes.item(i).getNodeName().equals("Firma"))
{
Firma = (nodes.item(i).getTextContent());
}
if(nodes.item(i).getNodeName().equals("Form"))
{
Form = (nodes.item(i).getTextContent());
}
if(nodes.item(i).getNodeName().equals("chemischer_ Name"))
{
chemischerName = (nodes.item(i).getTextContent());
}
if(nodes.item(i).getNodeName().equals("Packungsgr� �ße"))
{
Groesse = (nodes.item(i).getTextContent());
}
if(nodes.item(i).getNodeName().equals("Preis"))
{
Preis = (nodes.item(i).getTextContent());
}
if(nodes.item(i).getNodeName().equals("Organe"))
{
for(int j = 0; j < nodes.item(i).getChildNodes().getLength(); j++)
{
if(nodes.item(i).getChildNodes().item(j).getNodeNa me().equals("Organ"))
{
Organe.add ((nodes.item(i).getChildNodes().item(j).getTextCon tent()));
}
}
}
if(nodes.item(i).getNodeName().equals("Wirkungen") )
{
for(int j = 0; j < nodes.item(i).getChildNodes().getLength(); j++)
{
if(nodes.item(i).getChildNodes().item(j).getNodeNa me().equals("Wirkung"))
{
Wirkungen.add ((nodes.item(i).getChildNodes().item(j).getTextCon tent()));
}
}
}
if(nodes.item(i).getNodeName().equals("Nebenwirkun gen"))
{
for(int j = 0; j < nodes.item(i).getChildNodes().getLength(); j++)
{
if(nodes.item(i).getChildNodes().item(j).getNodeNa me().equals("Nebenwirkung"))
{
Nebenwirkungen.add ((nodes.item(i).getChildNodes().item(j).getTextCon tent()));
}
}
}
}
}
catch (XPathExpressionException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getNameMedikament()
{
return NameMedikament;
}
public void setNameMedikament(String nameMedikament)
{
NameMedikament = nameMedikament;
}
public String getFirma()
{
return Firma;
}
public void setFirma(String firma)
{
Firma = firma;
}
public String getForm()
{
return Form;
}
public void setForm(String form)
{
Form = form;
}
public String getChemischerName()
{
return chemischerName;
}
public void setChemischerName(String chemischerName)
{
this.chemischerName = chemischerName;
}
public String getGroesse()
{
return Groesse;
}
public void setGroesse(String groesse)
{
Groesse = groesse;
}
public String getPreis()
{
return Preis;
}
public void setPreis(String preis)
{
Preis = preis;
}
public ArrayList<String> getOrgane()
{
return Organe;
}
public void setOrgane(ArrayList<String> organe)
{
Organe = organe;
}
public ArrayList<String> getWirkungen()
{
return Wirkungen;
}
public void setWirkungen(ArrayList<String> wirkungen)
{
Wirkungen = wirkungen;
}
public ArrayList<String> getNebenwirkungen()
{
return Nebenwirkungen;
}
public void setNebenwirkungen(ArrayList<String> nebenwirkungen)
{
Nebenwirkungen = nebenwirkungen;
}
public Node LadeMedizindatenID (String ID)
{
try
{
Document doc = dh.LadeMedizindaten();
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression xpathEx ;
xpathEx= xpath.compile("//Medikamente/Medikament[@id='"+ID+"']");
Object result = xpathEx.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++)
{
if(nodes.item(i).getNodeName().equals("Medikament" ))
{
return nodes.item(i);
}
}
}
catch (XPathExpressionException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public boolean ErzeugeHTML (String ids)
{
//"./data/AusgabeHTML.html"
Document tmpdoc = null;
DOMImplementationImpl DOMImpl = new DOMImplementationImpl();
tmpdoc = DOMImpl.createDocument(null, "Medikamente", null);
Node n = LadeMedizindatenID(ids);
if(n != null)
{
tmpdoc.getChildNodes().item(0).appendChild(tmpdoc. adoptNode(n));
}
dh.SchreibeMedizindatentmpSpezial(tmpdoc);
try
{
File xmlFile = new File("./data/tmpMedizinSpezial.xml");
File xsltFile = new File ("./data/HTMLAusgabe_Medizin_einzeln.xsl");
File htmlFile = new File ("./data/AusgabeMedizinHTMLeinzeln.html");
Source xmlSource = new StreamSource(xmlFile);
Source xsltSource = new StreamSource(xsltFile);
TransformerFactory transFact = TransformerFactory.newInstance();
Transformer trans;
trans = transFact.newTransformer(xsltSource);
trans.transform(xmlSource, new StreamResult (htmlFile));
return true;
}
catch (TransformerConfigurationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public boolean ErzeugePDF (String ids)
{
//"./data/AusgabeHTML.html"
Document tmpdoc = null;
DOMImplementationImpl DOMImpl = new DOMImplementationImpl();
tmpdoc = DOMImpl.createDocument(null, "Medikamente", null);
Node n = LadeMedizindatenID(ids);
if(n != null){
tmpdoc.getChildNodes().item(0).appendChild(tmpdoc. adoptNode(n));
}
//dh.SchreibeMedizindatentmpSpezial(tmpdoc);
try {
OutputStream pdf = new FileOutputStream("./data/AusgabePDF_Medizin_einzeln.pdf");
Fop fop = FopFactory.newInstance().newFop(MimeConstants.MIME _PDF, pdf);
Source xml = new DOMSource(tmpdoc);
Source xsl = new StreamSource("./data/PDFAusgabe_Medizin_einzeln.xsl");
Result sax = new SAXResult(fop.getDefaultHandler());
Transformer transformer = TransformerFactory.newInstance().newTransformer(xs l);
transformer.transform(xml, sax);
return true;
}
catch (TransformerConfigurationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (TransformerException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (FOPException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}