В отличие от ElementTree или других сериализаторов, которые позволяют это, lxml
требует, чтобы вы предварительно настроили эти пространства имен:
NSMAP = {"dc" : 'http://purl.org/dc/elements/1.1',
"xlink" : 'http://www.w3.org/1999/xlink'}
root = Element("graph", nsmap = NSMAP)
(и так далее, и тому подобное для остальных объявлений)
И затем вы можете использовать пространства имен, используя их соответствующие объявления:
n = SubElement(root, "{http://purl.org/dc/elements/1.1}foo")
Конечно, это раздражает при наборе, поэтому обычно полезно назначать пути коротким именам констант:
DCNS = "http://purl.org/dc/elements/1.1"
А затем используйте эту переменную в объявлениях NSMAP
и SubElement
:
n = SubElement(root, "{%s}foo" % (DCNS))