Seite 1 von 2

xml export

Verfasst: Mo 20. Jul 2015, 15:57
von elefantino
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

Re: xml export

Verfasst: Mo 20. Jul 2015, 17:07
von RobertG
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

Re: xml export

Verfasst: Mo 20. Jul 2015, 19:51
von elefantino
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>

Re: xml export

Verfasst: Di 21. Jul 2015, 10:40
von RobertG
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

Re: xml export

Verfasst: Di 21. Jul 2015, 16:13
von elefantino
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 ...

Re: xml export

Verfasst: Di 21. Jul 2015, 17:29
von RobertG
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

Re: xml export

Verfasst: Mi 22. Jul 2015, 09:33
von RobertG
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

Re: xml export

Verfasst: Mi 22. Jul 2015, 21:46
von RobertG
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

Re: xml export

Verfasst: Do 23. Jul 2015, 10:15
von elefantino
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

Re: xml export

Verfasst: Sa 25. Jul 2015, 16:42
von elefantino
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.