Zum Inhalt springen

XML --> CSV per Java script


dommes89

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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