У меня есть данные XML, который выглядит следующим образом:Распаковка Конкретное значение XML тегов с помощью питона
<root>
<results preview='0'>
<meta>
<fieldOrder>
<field>title</field>
<field>search</field>
</fieldOrder>
</meta>
<messages>
<msg type="DEBUG">msg1</msg>
<msg type="DEBUG">msg2</msg>
</messages>
<result offset='0'>
<field k='title'>
<value>
<text>text1</text>
</value>
</field>
<field k='search'>
<value>
<text>text2</text>
</value>
</field>
</result>
</results>
</root>
Я хочу, чтобы извлечь значение тега text2
из тега k='search'>value>text
.
В моем коде я пытаюсь следующее:
for atype in root.findall(".//text"):
print(atype.text)
Это дает мне как text1
и text2
в качестве вывода. Из них мне нужно только text2
. Я мог бы обработать это в своей программе, чтобы иметь оператор if
, чтобы отфильтровать только значение text2
, но я хочу найти более надежный способ сделать это в findall()
.
Я попытался использовать этот код, чтобы специально извлечь только text2
в качестве вывода.
for atype in root.findall(".//field[@k='search']//text"):
print(atype.text)
Но это дает мне ошибку -
File "command_curl", line 49, in <module>
for atype in root.findall(".//field[@k='search']//text"):
File "/usr/lib64/python2.6/xml/etree/ElementTree.py", line 355, in findall
return ElementPath.findall(self, path)
File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 198, in findall
return _compile(path).findall(element)
File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 176, in _compile
p = Path(path)
File "/usr/lib64/python2.6/xml/etree/ElementPath.py", line 93, in __init__
"expected path separator (%s)" % (op or tag)
SyntaxError: expected path separator ([)
Что нужно изменить, чтобы получить только text2
как мой выход?
Работал отлично в Python 2.7: https://eval.in/526370 – har07
Я пробовал ваш 'findall', и он работал для меня как для elementtree, так и для lxml. У вас действительно старый элемент? – tdelaney
Спасибо har07 и tdelaney. У меня была старая версия elementtree, как вы предполагали. После указания на более новую версию python код теперь работает нормально. –