В вашем примере XML у вас есть:
Чтобы создать этот элемент с помощью lxml, вам необходимо использоватьполное имя с использованием фигурных скобок (нотация Джеймса Кларка).
Сначала определите словарь, в котором будет храниться ваше сопоставление пространства имен:
# your namespaces
p_url = "http://worldcat.org/xmlschemas/IDMPersonas-2.2"
xsi_url = "http://www.w3.org/2001/XMLSchema-instance"
NS = {None: p_url, 'xsi': xsi_url}
Чтобы построить полное пространство имен, вы можете определитьпрефиксы:
# tag prefixes
P = '{' + p_url + '}'
XSI = '{' + xsi_url + '}'
Затем вы можете определить имена тегов и атрибуты:
# tag names and attributes
root_tag = P + 'oclcPersonas'
attrs = {
XSI + 'schemaLocation':
"http://worldcat.org/xmlschemas/IDMPersonas-2.2 IDMPersonas-2.2.xsd"
}
Корневой элемент можно создать, как показано ниже:
# element
root = etree.Element(root_tag, attrib=attrs, nsmap=NS)
Вы должнываш элемент:
print(etree.tounicode(root))
Чтобы ответить на ваш вопрос:
2) Как разрешить пространствам имен содержать пробел без получения ошибки (http://worldcat.org/xmlschemas/IDMPersonas-2.2 IDMPersonas-2.2.xsd
)
Это не пространство имен, это значение атрибута schemaLocation
.Простая строка.