Парсинг xml ответа с помошью Xpath при использовании lxml

python
Теги: #<Tag:0x00007fedc46c5ae8>

(Виктор Казанков) #1

В процессе тестирования для парсинга xml использую библиотеку lxml/etree
Приходят данные в таком виде:

<ROWSET>
   <Result>True</Result>
   <R>
          <KEY>111</KEY>
          <SECTION>1</SECTION>
          <CHECK>1</CHECK>
   </R>
   <R>
          <KEY>222</KEY>
          <SECTION>2</SECTION>
          <CHECK>0</CHECK>
   </R>
   <R>
          <KEY>333</KEY>
          <SECTION>3</SECTION>
          <CHECK>1</CHECK>
   </R>

Задача, с помощью Xpath получить список ключей которые имеют значение поля CHECK = 1.
Единственное что удалось это получить объекты по такому запросу:

//CHECK[(text()='1') and //KEY/text()]

объекты которые удовлетворяют условию, но без ключей, как достать ключ каждого объекта не смог понять


(Yaroslav Pernerovskyy) #2

Вам сюда
https://www.w3schools.com/xml/xpath_axes.asp
находите CHECK=1 а потом от него preceding-sibling <KEY>


(Виктор Казанков) #3

Все помогло. Спасибо. На выходе получилось так:

xml_root = etree.XML(result)
find_key = etree.XPath("//CHECK[text()='1']/preceding-sibling::KEY")
values_arr = find_key(xml_root)
list_keys = []
for i in range(0, len(values_arr)):
     list_keys.append(values_arr[i].text)
print list_keys

В переменной list_keys список ключей полученных по условию