2016-02-26 2 views
1

У меня есть данные 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 как мой выход?

+1

Работал отлично в Python 2.7: https://eval.in/526370 – har07

+1

Я пробовал ваш 'findall', и он работал для меня как для elementtree, так и для lxml. У вас действительно старый элемент? – tdelaney

+0

Спасибо har07 и tdelaney. У меня была старая версия elementtree, как вы предполагали. После указания на более новую версию python код теперь работает нормально. –

ответ

0

Спасибо har07 и tdelaney. У меня была старая версия elementtree, как вы упомянули. После указания на более новую версию python код теперь работает нормально.

Смежные вопросы