Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

XML --> CSV per Java script

Empfohlene Antworten

Veröffentlicht

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

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.

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?

Eine erste Anlaufstelle mag die Groovy Dokumentation sein, insbesondere der Teil, der sich mit XML beschäftigt.

Gruß

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.

Passt :D Hab das Problem ja gelöst ;) Jetzt müssen wir nur noch die Fehleingaben abfangen.

ja^^ und genau das ist das problem, welches wir nicht gebacken bekommen :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.