🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

xml export

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

xml export

Beitrag von elefantino » Mo 20. Jul 2015, 15:57

Hallo, ich möchte einen Datensatz einer Base Datenbank in eine XML Datei eportieren. Funktioniert auch fast alles.
Die XML Datei muß allerdings ein bestimmtes Format haben, und da komme ich nicht weiter. Vielleicht kann mir jemand helfen.

Mein Code bisher:

Code: Alles auswählen

Sub ExportX
	Dim oleService, oXMLexp as Object, oXMLimp as Object
	Dim oRoot, oNode, oFatturaElettronicaHeader as Object 
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS Object
	Dim sNome As string
	
	oDoc = thisComponent
	oDrawpage = oDoc.Drawpage
	
	
	oForm = oDrawpage.Forms.getByName("Besitzer")
		sNome = oForm.getByName("txtNome").CurrentValue
	
	oleService = createUnoService("com.sun.star.bridge.OleObjectFactory")  

' Create an XML object to export
	oXMLexp = oleService.createInstance("Msxml.DOMDocument")

With oXMLexp
    .async = true 
    .validateOnParse = true 
    .resolveExternals = true 
 	 
    oRoot = .createElement("p:FatturaElettronica") 
    oRoot.nodeTypedValue =  ""
    .appendChild(oRoot) 

	    oFatturaElettronicaHeader = .createElement("Name")               
	    oFatturaElettronicaHeader.nodeTypedValue =  "" & sNome
	    oRoot.appendChild(oFatturaElettronicaHeader)

    .Save("C:\Dati\Fattura\test.xml")
End With

End Sub
Das ergibt dann die Ausgabe:

<p:FatturaElettronica><Name>xxxxxx</Name></p:FatturaElettronica>

Die Datei sollte aber so aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<p:FatturaElettronica versione="1.1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://www.xxxxxxxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FatturaElettronica>
<Name>xxxxxx</Name>
</p:FatturaElettronica>


Bin für Hilfe dankbar

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: xml export

Beitrag von RobertG » Mo 20. Jul 2015, 17:07

Hallo elefantino,

suchst Du jetzt nach einer Möglichkeit, den "Vorspann" vor den Dateninhalt zu setzen?
Oder suchst Du nach der Möglichkeit, jeweils Zeilenumbrüche einzubauen?

Ich würde einmal mit
xray oXMLexp
nachsehen, welche Methoden Dir zur Verfügung stehen. Da dürfte neben .createElement noch die Möglichkeit stehen, einen Vorspann hinzuzufügen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

Re: xml export

Beitrag von elefantino » Mo 20. Jul 2015, 19:51

Danke für die schnelle Antwort.
Ich habe das mit dem xray tool mal probiert, allerdings bekomme ich nur die Meldung (Leerer Datenwert (empty). Ich bin mir aber auch nicht sicher, ob ich das Teil richtig bediene, auch wenn es einfach zu sein scheint :-).
Wenn möglich wäre es schön, dass sowohl der "Vorspann", als auch die Zeilenumbrüche eingefügt werden.

Nochmal Danke

Nachtrag: Ich konnte soeben einen Teil lösen, hier der Code:

Code: Alles auswählen

...
oRoot = .createElement("p:FatturaElettronica")
    oRoot.setAttribute("Versione", "1.1")
    oRoot.setAttribute("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#")
    oRoot.setAttribute("xmlns:p", "http://www.xxxx")
    oRoot.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
...
Das ergibt dann die Ausgabe:

<p:FatturaElettronica Versione="1.1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://www.xxxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ... lettronica>

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: xml export

Beitrag von RobertG » Di 21. Jul 2015, 10:40

Hallo elefantino,

da muss ich leider passen. Ich habe das gerade versucht zu testen, bin aber mangels Windows bereits an der Zeile oXMLexp = oleService.createInstance("Msxml.DOMDocument") gescheitert.
Das wird auch der Grund sein, warum xray nichts weiter auswirft. Es wird da ein Element eingebunden, das nicht zur API von LibreOffice gehört und auf das kein Zugriff besteht.
Hilft also nichts als das Testen der üblichen Verdächtigen für einen Zeilenumbruch: <br />, \n, \r ...

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

Re: xml export

Beitrag von elefantino » Di 21. Jul 2015, 16:13

Hallo Robert,

Trotzdem Danke fürs versuchen :). Kennst Du eine andere Möglichkeit, eine XML Datei in dem Format zu erzeugen?
Oder eine Textdatei zu schreiben, dann Tippe ich halt alle start/ende Tags manuell ein ...

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: xml export

Beitrag von RobertG » Di 21. Jul 2015, 17:29

Hallo elefantino,

ich habe gerade für das neue Handbuch ein Kapitel erstellt gehabt, bei dem aus einem *.pdf-Formular Daten in eine Textdatei übertragen wurden und anschließend in eine Datenbank eingelesen werden. Da ist, wenn auch etwas versteckt, der Teil mit drin, in dem die Textdatei erstellt wird. Ich hänge einfach einmal das Beispiel an.
Du musst auf jeden Fall mit
inNumber = FreeFile
beginnen ...

Ich kenne mich mit XML nicht genügend aus um sagen zu können, ob ein entsprechendes Datenformat allegmeingültig ist. Ansonsten würde ich das selbst schreiben ...

Gruß

Robert
Dateianhänge
PDF_Formular.zip
Daten aus PDF-Formular in eine Textdatei übertragen und anschließend in DB einlesen
(41.35 KiB) 271-mal heruntergeladen
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: xml export

Beitrag von RobertG » Mi 22. Jul 2015, 09:33

Hallo elefantino,

ich habe mir das jetzt noch einmal angesehen. Das Beispiel, das ich vorher zum Einlesen von pdf-Dateien angehängt habe, passt gar nicht. Ich habe einmal einen grundlegenden Aufbau zusammen gestellt, der erst einmal ohne Datenbankanbindung funktioniert: Es wird eine Textdatei geschrieben, die einem xml-Aufbau (vermutlich) entspricht:

Code: Alles auswählen

SUB XML_create
	DIM stStart AS STRING
	DIM stFolder AS STRING
	DIM stTitle AS STRING
	DIM stRow AS STRING
	DIM arFields()
	DIM arFieldsContent()
	DIM oFileAccess AS OBJECT
	DIM oFile AS OBJECT
	DIM oDB AS OBJECT
	DIM stDir AS STRING
	DIM oOutputStream AS OBJECT
	stStart = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>"
	stFolder = "folder"
	stTitle = "title"
	stTitleContent = "persons"
	stRow = "entry"
	arFields = Array("forename","surname")
	arFieldsContent = Array("Robert","Großkopf")
	oDB = ThisComponent
	stDir = Left(oDB.Location,Len(oDB.Location)-Len(oDB.Title))
	oFileAccess = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	IF oFileAccess.exists(stDir & "xmlexport.txt") THEN
		oFileAccess.move(stDir & "xmlexport.txt", stDir & "xmlexport.bak")
	END IF
	oFile = oFileAccess.openFileWrite(stDir & "xmlexport.txt")
	oOutputStream = createUnoService("com.sun.star.io.TextOutputStream")
	oOutputStream.setOutputStream(oFile)
	oOutputStream.writeString(stStart & CHR(13) & CHR(10) & "<" & stFolder & ">" & CHR(13) & CHR(10))
	oOutputStream.writeString("<" & stTitle & ">" & stTitleContent & "</" & stTitle & ">" & CHR(13) & CHR(10))
	oOutputStream.writeString("<" & stRow & ">" & CHR(13) & CHR(10))
	FOR i = LBound(arFields) TO UBound(arFields)
		oOutputStream.writeString("<" & arFields(i) & ">" & arFieldsContent(i) & "</" & arFields(i) & ">" & CHR(13) & CHR(10))
	NEXT
	oOutputStream.writeString("</" & stRow & ">" & CHR(13) & CHR(10))	
	oOutputStream.writeString("</" & stFolder & ">")
	oOutputStream.closeOutput()
END SUB
Willst Du so ein Makro aus dem Formular heraus starten, so ist statt
oDB = ThisComponent
oDB = ThisComponent.Parent
einzufügen.
Das Auslesen der Daten sollte dann das Array ersetzen, in dem im Moment fest mein Name geschrieben steht.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: xml export

Beitrag von RobertG » Mi 22. Jul 2015, 21:46

Ich habe noch etwas nachgelegt: Eine Datenbank, bei der Daten in eine XML-Datei exportiert werden können (einzelne Datensätze oder alle Datensätze unter Berücksichtigung der Filterung im Formular).
Aus einer Datei mit gleichem Aufbau können auch Datensätze importiert werden.

Ich hänge das einmal an. Vielleicht wird daraus ja eine Beispieldatenbank für meine Sammlung ...

Gruß

Robert
Dateianhänge
Beispiel_XML_Export_Import.odb.zip
Export und Import von XML-Daten
(17.03 KiB) 338-mal heruntergeladen
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

Re: xml export

Beitrag von elefantino » Do 23. Jul 2015, 10:15

Hallo Robert, zuerst mal vielen Dank, dass Du nicht locker läßt, und Deine Zeit investierst :D . So schnell konnte ich die verschiedenen Lösungen noch gar nicht testen :D .
Dein letzter Vorschlag mit der Datenbank Beispieldatei ist ja schon sehr gut, und brauchbar.
Trotzdem habe ich ehrlich gesagt noch nicht so richtig verstanden, wieso es so schwierig ist, einen Export als XML Datei zu machen, ich dachte, OpenOffice/Libreoffice basiert auf XML Dateien. Es scheint sich allerdings auch sonst nicht wirklich jemand für dieses Thema zu interessieren.
Nach weiterem Suchen habe ich im OpenOffice Forum noch dieses gefunden:
http://de.openoffice.info/viewtopic.php ... ds#p255366
Dieses Makro ist allerdings in Python geschrieben, davon verstehe ich nun aber noch weniger als von Basic.

Danke nochmals für Deine Mühe ;)
Ciao
Mario

elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

Re: xml export

Beitrag von elefantino » Sa 25. Jul 2015, 16:42

Für alle, die das Thema XML Export doch noch interessiert - ich habe noch ein stückchen gefunden, das die Declaration am Beginn der Datei macht:

Code: Alles auswählen

...

With oXMLexp
    .async = false 
    .validateOnParse = false 
    .resolveExternals = false
     
	.appendChild .createProcessingInstruction( _
                 "xml", _
                 "version=""1.0"" encoding = ""UTF-8"" standalone=""yes""")

...

Das ergibt dann diese Ausgabe:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Wenn es jetzt noch gelingt, die Zeilenumbrüche zu machen, dann würde man das ganze auch vernünftig lesen können. Spielt aber für die Datei keine Rolle.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten