Как я могу получить объявления префикса XML из корневого элемента с помощью lxml

test.xml:

<!--?xml version="1.0" encoding="utf-8"?-->
<root xmlns="http://example.com" xmlns:foo="http://example.com/bar">
 <foo:child>yikes</foo:child>
</root>

test.py:

from lxml import objectify
root = objectify.fromstring(file('test.xml').read())
print root.attrib

Выходы:

{}

Как я могу получить объявления префикса? Т.е. что-то вроде:

{
 "xmlns": "http://example.com",
 "xmlns:foo": "http://example.com/bar"}

ОБНОВИТЬ:

root.keys(), root.items() и root.values() yield [], [] и {} соответственно.

2 ответа

Element объекты имеют свойство nsmap которое содержит все известные пространства имен для контекста элемента. Упоминается в учебнике.

>>> root.nsmap
{None: "http://example.com", "foo": "http://example.com/bar"}


import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
root = tree.getroot()
print(root.attrib)

Вывод:

{'xmlns': ' http://example.com ' 'xmlns: foo' = ' http://example.com/bar '}

надеюсь, это поможет

licensed under cc by-sa 3.0 with attribution.