Ich arbeite an einem kleinen Projekt, das ziemlich einfach sein sollte. Ich weiß, dass es schon einmal gemacht wurde, aber für das Leben von mir kann ich es nicht zur Arbeit bringen. Alles klar, also habe ich eine docx Vorlage mit Microsoft Word gemacht, die einen Header und nur etwas Text im Text des Papiers enthält. Mein Ziel ist ein Programm, das diesen Text ändern kann. Mit python-docx konnte ich erfolgreich ein Programm schreiben, das den Fließtext einfach modifiziert. Davon abgesehen versuche ich zu lernen, wie man das selbe durch XML-Parsing macht, wodurch der Header geändert werden kann. Lange Rede, kurzer Sinn, XML-Parsing (ich denke, das ist was es ist) wird mir viel mehr Freiheit auf der Straße geben.Bearbeiten einer DOCX-Datei
Ich weiß, nachdem das docx entpackt ist, enthält das Wort/document.xml den Nachrichtentext. Hier ist mein Code so weit.
from lxml import etree as ET
tree = ET.parse('document.xml')
root = tree.getroot()
for i in root.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t'):
if i.text == 'Title':
i.text = 'How to cook'
tree.write('document_output.xml', xml_declaration = True, encoding = "UTF-8", method = "xml" \
, standalone = "yes")
Dieses Programm ändert erfolgreich den gewünschten Text in den aktualisierten Text.
Hier ist das Original document.xml
https://www.dropbox.com/s/ghe1m176rdqtng7/document.xml?dl=0
Hier ist der Ausgang.
https://www.dropbox.com/s/8n9llagozbvb2mz/document_output.xml?dl=0
P. S. Wenn Sie den Code aus Dropbox anzeigen, beginnt alles in Zeile 4 statt in Zeile 1.
Wenn Sie sie in einem XML-Viewer anzeigen, können Sie sehen, dass sie identisch sind. Wenn Sie ein Textdifferenz-Werkzeug verwenden, ist der einzige Unterschied das geänderte Wort. Und ich würde nicht denken, dass dies wichtig wäre, aber die obere Zeile verwendet einfache Anführungszeichen anstelle von doppelten.
Hoffe jemand kann etwas Licht auf warum dies immer noch nicht richtig in Word öffnen.
Danke für die Hilfe !!
Das erste Problem ist kein Problem: Namespace-Präfixe müssen nur deklariert werden, wenn sie verwendet werden, und die Präfixe selbst sind unbedeutend; Solange der zugehörige URI gleich ist, sind die Elemente mit Namespace gleichwertig.Was ist das zweite Problem, wenn überhaupt? Wird das erstellte Dokument wie erwartet in Word angezeigt? – kjhughes
Wenn ich versuche, es in Word zu öffnen, heißt es, dass die Datei beschädigt ist. Ich nehme an, dass, damit es richtig geöffnet wird, alles bis auf den geänderten Text der ursprünglichen XML-Datei entsprechen sollte. Ich kann die XML-Datei im Editor öffnen und den Text gut editieren. Das funktioniert perfekt. Ich versuche nur, ein Python-Programm zu bekommen, um das durch XML-Parsing zu tun. –
Es gibt viele Einschränkungen, die erfüllt sein müssen, damit eine DOCX-Datei gültig ist. Siehe zum Beispiel [Wo finde ich die XSDs von DOCX-XML-Dateien?] (Http://stackoverflow.com/questions/36428294/where-can-i-find-the-xsds-of-docx-xml-files). – kjhughes