ElementTree , . , , ( ):
from xml.etree import ElementTree as ET
NAMESPACES = {"anim": "urn:oasis:names:tc:opendocument:xmlns:animation:1.0",
"chart": "urn:oasis:names:tc:opendocument:xmlns:chart:1.0",
"config": "urn:oasis:names:tc:opendocument:xmlns:config:1.0",
"db": "urn:oasis:names:tc:opendocument:xmlns:database:1.0",
"dc": "http://purl.org/dc/elements/1.1/",
"dr3d": "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0",
"draw": "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",
"fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",
"form": "urn:oasis:names:tc:opendocument:xmlns:form:1.0",
"grddl": "http://www.w3.org/2003/g/data-view#",
"manifest": "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0",
"math": "http://www.w3.org/1998/Math/MathML",
"meta": "urn:oasis:names:tc:opendocument:xmlns:meta:1.0",
"number": "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",
"odf": "http://docs.oasis-open.org/ns/office/1.2/meta/odf#",
"of": "urn:oasis:names:tc:opendocument:xmlns:of:1.2",
"office": "urn:oasis:names:tc:opendocument:xmlns:office:1.0",
"pkg": "http://docs.oasis-open.org/ns/office/1.2/meta/pkg#",
"presentation": "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0",
"script": "urn:oasis:names:tc:opendocument:xmlns:script:1.0",
"smil": "urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0",
"style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
"svg": "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",
"table": "urn:oasis:names:tc:opendocument:xmlns:table:1.0",
"text": "urn:oasis:names:tc:opendocument:xmlns:text:1.0",
"xforms": "http://www.w3.org/2002/xforms",
"xhtml": "http://www.w3.org/1999/xhtml",
"xlink": "http://www.w3.org/1999/xlink"}
document_content = ET.parse('content-scaffold.xml').getroot()
office_body = document_content.find('office:body', NAMESPACES)
office_text = office_body.find('office:text', NAMESPACES)
p = ET.SubElement(office_text, 'text:p')
p.text = "Hello"
for prefix, uri in NAMESPACES.items():
ET.register_namespace(prefix, uri)
if prefix not in ("office", "fo", "style"):
document_content.set("xmlns:" + prefix, uri)
ET.ElementTree(document_content).write("output.xml")
.
lxml:
from lxml import etree as ET
NAMESPACES = {"office": "urn:oasis:names:tc:opendocument:xmlns:office:1.0"}
document_content = ET.parse('content-scaffold.xml')
office_body = document_content.find('office:body', NAMESPACES)
office_text = office_body.find('office:text', NAMESPACES)
p = ET.SubElement(office_text, '{urn:oasis:names:tc:opendocument:xmlns:text:1.0}p')
p.text = "Hello"
document_content.write("output.xml")
, , SubElement().