Generating a report: Python to ODT (OOO) or doc

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Freitag Nachmittag, mein Gehirn schaltet sich ab, oder so..

Aber um nochmal festzuhalten

Ich erstelle mit ODFPY aus einem vorhanden oo-file ein neues und schreibe dort Informationen rein.
Diese Informationen sind teilweise HTML und müssen (mit der vorhanden Formatierung, Einrückungen etc)
umgewandelt werden, um diese mit ODFPY in das File mit Formatierungen abzuspeichern.

Es ist möglich die Umwandlung diese Umwandlung mit lxml bzw. ElementTree zu machen?
D.h. ich kann nach meiner idealistischen Auffwassung vorne html reinstecken und bekomme hinten xml raus?

Externe Formatierungsangaben sind hierfür nicht notwendig?

Ansonsten sollte ich fast über einen anderen WEg generell nachdenken, um aus python einen odf report zu generieren?

schönes Wochenende
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo zusammen,

entschuldigt das ich euch schon wieder in Beschlag nehme.

Themenstellung: (x)html -> odt

Ich Versuche jetzt mittels lxml, was hier ja empfohlen wird, einen html-String mittels eines xslt in ein odt zu transformieren.

Allerdings wird quasi nicht ein einziger Tag erkannt.

Als XSLT verwende ich http://gitorious.org/xhtml2odt/xhtml2odt/

Aufruf in Python ist dann relativ unspektakulär

Code: Alles auswählen

        xslt_doc = etree.parse("xhtml2odt.xsl")
        transform = etree.XSLT(xslt_doc)

        xhtml = etree.fromstring(xhtml) # must be valid xml
        odt = transform(xhtml,debug="1")
        return str(odt).replace('<?xml version="1.0" encoding="utf-8"?>','')
Allerdings bekomme ich dank debug-funktion angezeigt, das kein Tag erkannt wurde.

Input

Code: Alles auswählen

"<html><head><title></title></head><body><p><strong>headline</strong></p><p> \
    text text text</p><ul><li>punkt 1</li> <li>punkt 2</li> <li> punkt 3</li></ul></body></html>"
Output:

Code: Alles auswählen

<!--Unknown tag : htmlheadline text text textpunkt 1 punkt 2 punkt 3--> <html> <!--Unknown tag : head--> <head> <!--Unknown tag : title--> <title/> </head> <!--Unknown tag : bodyheadline text text textpunkt 1 punkt 2 punkt 3--> <body> <!--Unknown tag : pheadline--> <p> <!--Unknown tag : strongheadline--> <strong>headline</strong> </p> <!--Unknown tag : p text text text--> <p> text text text</p> <!--Unknown tag : ulpunkt 1 punkt 2 punkt 3--> <ul><!--Unknown tag : lipunkt 1--><li>punkt 1</li> <!--Unknown tag : lipunkt 2--><li>punkt 2</li> <!--Unknown tag : li punkt 3--><li> punkt 3</li></ul> </body> </html> 
Kennt evtl jemand von euch das Verfahren und könnt mir einen Wink mit dem Zaunpfahl geben, was ich hier falsch mache?


Vielen Dank für eure Hilfe.

Grüße
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Nach dem ich wohl ein paarmal meinen Kopf gegen die Wand geschlagen habe ist mir dann doch noch
der "dumme" Fehler aufgefallen.
Es kann ausschließlich xhtml zu odt gewandelt werden und nicht html zu odt. xHTML unterscheidet sich zu html "natürlich" darin, das eine Angabe wie xmlns=\"http://www.w3.org/1999/xhtml\" erfolgen muss.
Dann klappt das schon gleich viel besser.

Geht es nur noch darum odfpy klar zu machen , dass der übergebene xhtml String nicht als String sondern eben
als xml in content.xml eingefügt werden soll. Die Api ist zwar nicht gut, aber ich bin mir sicher das auch sowas möglich sein sollte. Ich geb euch bescheid, falls ich es gefunden habe.

Grüße
Antworten