У меня есть XML, малая его часть выглядит следующим образом:Синтаксический XML с пространствами имен с использованием ElementTree в Python
<?xml version="1.0" ?>
<i:insert xmlns:i="urn:com:xml:insert" xmlns="urn:com:xml:data">
<data>
<image imageId="1"></image>
<content>Content</content>
</data>
</i:insert>
Когда я разобрать его с помощью ElementTree
и сохранить его в файл я вижу следующее:
<ns0:insert xmlns:ns0="urn:com:xml:insert" xmlns:ns1="urn:com:xml:data">
<ns1:data>
<ns1:image imageId="1"></ns1:image>
<ns1:content>Content</ns1:content>
</ns1:data>
</ns0:insert>
Почему это изменяет префиксы и помещает их повсюду? Использование minidom
У меня нет такой проблемы. Он настроен? Документация для ElementTree
очень плохая. Проблема в том, что я не могу найти ни одного узла после такого разбора, например image
- не может найти его с пространством имен или без него, если я использую его как {namespace}image
или просто image
. Почему это? Любые предложения заслуживают высокой оценки.
Что я уже пробовал:
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
for a in root.findall('ns1:image'):
print a.attrib
Это возвращает ошибку, а другой ничего не возвращает:
for a in root.findall('{urn:com:xml:data}image'):
print a.attrib
Я также попытался сделать пространство имен, как это и использовать его:
namespaces = {'ns1': 'urn:com:xml:data'}
for a in root.findall('ns1:image', namespaces):
print a.attrib
Он ничего не возвращает. Что я делаю не так?
Можете ли вы добавить код Python, который используется для анализа XML? –