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
}
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);
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();
}
zum glück macht derjenige seinen Master in Informatik^^ ne, weiß au nit was der da verzapft hat, mittlerweile ham wir es hinbekommen das alles so funzt wie es soll,...
ich zweifel ab an einigen stellen wirklich, das zweite problem war dass das pdf erstellen nich funktioniert hat, da lag der fehler darin das er es nach dem schreiben nicht geschlossen hat...
nya, aufregen is da fehl am platz, hauptsache es funktioniert und sie kann den beleg pünktlich abgeben, da spart man nerven^^
Edit: oder es funzt grad wieder gar nix, aber ich bin zuversichtlich, vorhin ging schon mal alles wie es sollte ;o)
na wie gesagt, ich weiß au nit wie er das verzapft hat,... will ihm ja jetzt nich bösartigkeit unterstellen,... aber die fehler sind schon komisch...
Edit:
so, anscheinend haben wir alle fehler draußen, nur ein was ist mir ein wenig spanisch, bei den beiden pc´s von meiner komiltonin und dem zweiten fehlerbeheber funktioniert das erstellen einer HTML einwandfrei (abgesehen von nem kleinen xsl fehler der noch behoben werden muss), bei mir jedoch, funktioniert es immer noch nicht und es taucht das oben beschriebene Problem auf, obwohl ich das gleiche archiv-file habe.
hat so etwas irgendwas zu sagen oder kann das halt einfach passieren?
Und kurz nebenbei, ja, ich weiß das der code scheiße ist, wird er auch bleiben, nur das er halt eben funktioniert, deshalb muss dieser punkt jetzt nicht weiter debattiert werden, da mir das nich unbedingt weiter hilft ;o)
omg habe fast augenkrebs bekommen!
rekursion ist ihm wohl ein fremdwort, vor allem kann man rekursive methoden schön beim xml parsen benutzen..... naja, nimm den rat von HababaX an, denn neu schreiben ist schneller und für die zukunft dann übersichtlicher als in dieser scheisse zu wühlen
WTF - also Quellcode ist das eher nicht mehr - eher Kot oder Quälcode. :->
Aber kommentiert ist das doch alles perfekt: "// TODO Auto-generated catch block" - ich weiß gar nicht was du hast.
Wer so einen scheiss verzapft, sollte es lieber sein lassen und nicht noch anderen so ein Wissen vorgaukeln, was offensichtlich gar nicht vorhanden ist.
Je mehr ich diesen Scheiss ansehe, umso schlimmer wird es... ich kann dir nur raten, das Programm komplett neu zu schreiben und diesmal hoffentlich mit mehr fachlich kompetenter Hilfe als von so einem Vollpfosten, der keinen Plan hat.
so, wir haben das ganze jetzt zum laufen gebracht ohne alles neu zu schreiben, und ja, wir hatten auch jetzt um einiges kompetentere Hilfe.
Aber Mensch Leute, ich hab euch doch recht gegeben dass der Code Dreck ist, warum reitet ihr immernoch darauf rum, das macht ihn schließlich auch nicht besser?
und den Quelltext wird sich der Prof nicht wirklich anschauen, ihm geht es lediglich um XML, d.h. er wird sich die selbst erstellten und generierten XML sowie die XSL Dateien anschauen, und der einzige Minuspunkt der noch vorhanden ist, ist dass die kundenHTML ein wenig, entschuldigt den Ausdruck, gefickt aussieht, da muss ich mal schauen ob es noch wird, oder es einfach in die Fehleranalyse reingeschmissen wird...
es gibt halt einige Minuspunkte die eigtl nicht sein müssen, teilweise die Aufteilung der gui, die Darstellung im HTML, halt viele krümelkacker sachen, aber so wie ich den Prof einschätze freut es ihn das dies alles in der Fehlerbetrachtung und dem Ausblick beachtet wird...
ich hoffe es erwartet niemand das ich mich rechtfertige warum ich das ganze nicht neu aufgesetzt habe in der (für das Verhältnis meiner Kenntnisse) kurzen Zeit
Jungens, hab ich eigentlich schon erwähnt das wir nicht Informatik studieren?
75% der Leute in meinem Studiengang haben keine Ahnung von der Informatik, und sind rein auf Biotechnologie ausgelegt. Das hat sich mittlerweile eingebürgert und sie mogeln sich durch die Bioinformatischen/ allgemein Informatischen teile durch, und das akzeptieren die Profs, da diese Leute eh später mal in den Laboren stehen und nen PC nur für Datenbanken nutzen werden, und wenn nicht, ist es später ihr Problem und nicht das der Profs.
Ich sagte lediglich das der Code von einem Masterstudenten der Informatik stammt.
Aber prinzipiell hast du Recht HababaX, das spreche ich dir nicht ab.
Es kann auch möglich sein das ich den Prof total falsch einschätze, das werden wir sehen wenn die beiden ihre Note haben.