dommes89 Geschrieben 12. September 2008 Geschrieben 12. September 2008 Guten Tag, Ich bräuchte etwas hilfe für das folgende problem: Ich möchte ein Java/Groovy script schreiben mit dem ich eine bestimmte xml-datei in eine csv-datei umwandeln kann... Soll heißen: Die daten die in der XML datei stehen sollen ohne die ganzen Tags usw. später in einer csv datei aufgelistet werden. Sprich nur die informationen. Das ganze soll möglichst ohne anforderungen geschehen... sprich keine extra programme oder andere externe anwendungen... möglichst nur per java script. hoffe da kann mir wer weiterhelfen. grüße Zitieren
Schiller256 Geschrieben 12. September 2008 Geschrieben 12. September 2008 Erstmal ist Java != Java Script. Dann wie soll das denn gehen? Java Script läuft im Browser ab die XML Datei könne man eventuell vom Server laden aber wie soll die CSV Datei dann in deinem Betriebssystem gespeichert werden? Denn Java Script darf zum Glück nicht im Filesystem Dateien ablegen und verändern. Zitieren
Dragon8 Geschrieben 12. September 2008 Geschrieben 12. September 2008 Ich denke der Threadersteller meint schon das richtige Java und nicht JavaScript für den Browser. Ich schätze mal er hat die Begrifflichkeiten nur etwas durcheinander gebracht. Weil Groovy ist eine auf Java aufsetzende Skriptsprache. So gesehen würde es dann ein Skript in Java sein, halt ein Java-Skript. Ist natürlich nicht gerade leicht zu erraten, wenn sämtliche Satzzeichen und Groß- und Kleinschreibung weggelassen werden. Nichts desto trotz, wo liegt dein Problem genau, dommes89? Wie sieht dein bisheriger Code aus? Zitieren
kein-tee Geschrieben 12. September 2008 Geschrieben 12. September 2008 Eine erste Anlaufstelle mag die Groovy Dokumentation sein, insbesondere der Teil, der sich mit XML beschäftigt. Gruß Zitieren
dommes89 Geschrieben 15. September 2008 Autor Geschrieben 15. September 2008 Also.. Erst mal Tschuldigung für die verwechslung =) Dragon8 hat da schon recht. So nun zum Thema: Also wir haben soweit nun schon alles hinbekommen. Das aktuelle script sah nun wie folgt aus: import com.gargoylesoftware.htmlunit.WebClient import com.gargoylesoftware.htmlunit.BrowserVersion import com.gargoylesoftware.htmlunit.html.* import java.io.* import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.text.MessageFormat def timestamp = MessageFormat.format("{0,date,ddMMyyyy}", new Date()) System.setProperty("timestamp", timestamp) def fileName='C:/xmlParserProjekt/'+timestamp+'_aufgabeFertig.csv' def url ='URL_ZUM_XML_FILE' def xmlContent = new XmlParser().parse(url).channel[0].item def tz=';' def XmlContent println 'Current source: '+url println 'Current separator: '+tz println '' println 'Starting program: ...' println '' println '' xmlContent.each { area -> XmlContent+=area.title.text()+tz+area.link.text()+tz+area.description.text()+tz+area.environment.text()+tz+area.key.text()+tz+area.summary.text()+tz+area.type.text()+tz+area.priority.text()+tz+area.status.text()+tz+area.resolution.text()+tz+area.assignee.text()+tz+area.reporter.text()+tz+area.created.text()+tz+area.updated.text()+tz+area.fixVersion.text()+tz+area.due.text()+tz+area.comments.text()+tz+area.attachments.text()+tz+area.subtasks.text()+tz+area.customfields.text()+tz+'\n' } println 'File '+url+' executed.' saveTextFile(XmlContent,fileName) public static void saveTextFile(contents,fileName2) throws IOException { PrintWriter out = new PrintWriter(new FileWriter(fileName2)); out.print(contents); out.close(); println 'File '+fileName2+' created.' } println '' println '' println 'Finished!' So... alles klappt wunderbar: Die Daten, welche die XML-Datei enthält werden aus der XML-Datei herausgefiltert und in eine CSV-Datei geschrieben und jeweils mit ";" getrennt. Nun wollen wir jedoch das ganze für die Kommandozeile anpassen um es z.B. mit dem "at"-Befehl immer zu einem bestimmten Zeitpunkt laufen zu lassen. Und zusätzlich das ganze noch allgemein anpassen. Sprich dem Benutzer die möglichkeit geben, bei der Eingabe den Pfad zum XML-File, das Trennzeichen und den Ziel-Dateinamen selbst zu bestimmen. Jedoch soll dabei der Pfad zu dem XML-File notwendig sein, Trennzeichen und Ziel-Dateinamen aber nur optional und bei nicht-eingabe die vordefinierten daten genutzt werden. Allerdings läuft unser script jetzt nur sofern wir alle 3 Angaben gemacht haben. Sonst erscheinen folgende Fehler: - Wenn man nur die URL zum XML-File angibt: url wurde angegeben Caught: java.lang.ArrayIndexOutOfBoundsException: 1 at XMLConverter_v1.40.run(XMLConverter_v1.40.groovy:32) at XMLConverter_v1.40.main(XMLConverter_v1.40.groovy) - URL und Trennzeichen: url wurde angegeben trennzeichen wurde angegeben Caught: java.lang.ArrayIndexOutOfBoundsException: 2 at XMLConverter_v1.40.run(XMLConverter_v1.40.groovy:44) at XMLConverter_v1.40.main(XMLConverter_v1.40.groovy) ...... Hier das aktuelle script: import com.gargoylesoftware.htmlunit.WebClient import com.gargoylesoftware.htmlunit.BrowserVersion import com.gargoylesoftware.htmlunit.html.* import java.io.* import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.text.MessageFormat def fileName def url def tz def var = 0 def timestamp = MessageFormat.format("{0,date,ddMMyyyy_HHmm}", new Date()) System.setProperty("timestamp", timestamp) if(args[var] != null && args[var].indexOf('.xml')) //Check if argument is set and if it contains the .xml filextension { url=args[var] // First argument is url to document println 'url wurde angegeben' var++ //If right type of argument is set go go next argument index } else { //otherwise it's this Static path url='URL_ZUM_XML_FILE' println 'URL wurde nicht gesetzt oder falsch eingebeben. URL ist jetzt '+url } if(args[var] != null && args[var].length()==1) { //Second argument is seperator println 'trennzeichen wurde angegeben' tz=args[var] var++//If right type of argument is set go go next argument index } else { tz=';' //otherwise it's ; println 'Trennzeichen wurde nicht gesetzt oder ist zu lang. Maximal 1 Zeichen. Trennzeichen ist '+tz } if(args[var] != null && args[var].length()>2) { println 'Dateiname wurde angegeben' fileName='C:/xmlParserProjekt/'+args[var]+timestamp+'.csv' //Filename is third argument } else { fileName='C:/xmlParserProjekt/'+timestamp+'_jira'+'.csv' //Or "timestamp"_jira.csv println fileName+'Dateiname wurde nicht gesetzt. Automatisch generierter Dateiname ist: '+fileName } def xmlContent = new XmlParser().parse(url).channel[0].item def XmlContent println 'Current source: '+url println 'Current separator: '+tz println '' println 'Starting program: ...' println '' println '' xmlContent.each { area -> XmlContent+=area.title.text()+tz+area.link.text()+tz+area.description.text()+tz+area.environment.text()+tz+area.key.text()+tz+area.summary.text()+tz+area.type.text()+tz+area.priority.text()+tz+area.status.text()+tz+area.resolution.text()+tz+area.assignee.text()+tz+area.reporter.text()+tz+area.created.text()+tz+area.updated.text()+tz+area.fixVersion.text()+tz+area.due.text()+tz+area.comments.text()+tz+area.attachments.text()+tz+area.subtasks.text()+tz+area.customfields.text()+tz+'\n' } println 'File '+url+' executed.' //println XmlContent saveTextFile(XmlContent,fileName) public static void saveTextFile(contents,fileName2) throws IOException { PrintWriter out = new PrintWriter(new FileWriter(fileName2)); out.print(contents); out.close(); println 'File '+fileName2+' created.' } println '' println '' println 'Finished!' Ich hoffe jetzt ist alles klar. vielen dank. Zitieren
Ghostridah Geschrieben 15. September 2008 Geschrieben 15. September 2008 Passt Hab das Problem ja gelöst Jetzt müssen wir nur noch die Fehleingaben abfangen. Zitieren
dommes89 Geschrieben 16. September 2008 Autor Geschrieben 16. September 2008 ja^^ und genau das ist das problem, welches wir nicht gebacken bekommen 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.