Привет
Я использую ElementTree
(1.3) с Python 2.7 и наслаждаюсь функциональностью XPath,
однако один из результатов поиска меня удивил.
Мой пример XML:
<OTF>
<FECS state="disabled" version="2.2.0.0">
<BackEndCompatibility major="2.2" state="disabled">
<BackEnd state="disabled" version="2.2.0.0"/>
</BackEndCompatibility>
</FECS>
</OTF>
Вопрос 1:
Когда я использую findall
, чтобы получить первый найденный элемент
version = "2.2.0.0"
found = list(txml.findall(".//BackEnd[@version='%s']" % version))
return found and found[0] or None
ничего не находит.
Однако, когда я изменяю файл XML, так что элемент BackEnd
содержит подэлементов ,
<BackEnd state="disabled" version="2.2.0.0">
<any_dummy_element/>
</BackEnd>
, тогда искомый элемент будет найден правильно.
Сталкивались ли вы с таким поведением?
Я что-то делаю неправильно или это ошибка в реализации ElementTree
?
Вопрос 2:
У меня есть еще одна проблема: xmlns
.
Предположим, я изменил первую строку XML на xmlns
:
<OTF xmlns="http://si-wiki/OTFCompatibility">
</OTF>
. В таком случае мне нужно изменить строку поиска на:
".//{http://si-wiki/OTFCompatibility}BackEnd[@version='%s']"
Есть ли способ сказать ElementTree игнорировать xmlns во время синтаксического анализа и обрабатывать имена всех элементов (включая root), как будто они не имеют префикса?
С уважением,
Збигнев