пространства имен атрибутов Python lxml в пространствах имен - PullRequest
0 голосов
/ 18 октября 2018

В документации, которую я просматриваю для загрузки файла, в начале XML-файла нужен специальный тег:

<oclcPersonas xmlns="http://worldcat.org/xmlschemas/IDMPersonas-2.2" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://worldcat.org/xmlschemas/IDMPersonas-2.2 IDMPersonas-2.2.xsd">

Я пытаюсь использовать библиотеку lxml.etree длявыяснить это.

Многие из примеров, которые я видел, имеют начальный уровень пространства имен для атрибутов, который охватывал бы часть xmlns:xsi, используя это:

namespace_map = {
        None: persona_namespace,
        'xsi': "http://www.w3.org/2001/XMLSchema-instance"}

, но из второй части возникают 2 вопросаxsi:schemaLocation

1) Как мне выполнить вторичный уровень пространства имен, используя lxml?

2) Как разрешить пространствам имен содержать пробел без получения ошибки (http://worldcat.org/xmlschemas/IDMPersonas-2.2 IDMPersonas-2.2.xsd)

1 Ответ

0 голосов
/ 19 октября 2018

В вашем примере 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.Простая строка.

...