Как использовать Element.findall () для поиска тега и вывода его значения - PullRequest
0 голосов
/ 27 мая 2020

Я решил рискнуть с python v2.6.6 среди других вариантов, чтобы найти и распечатать определенные c tag в файле xml. В итоге у меня было несколько for..loop, что мне не понравилось, я подумал, что может быть лучший способ.

Я искал здесь, и похоже, что Element.findall() был многообещающим, но напечатано пустое значение. Вот пример файла (test.xml).

<?xml version='1.0' encoding='UTF-8'?>
<parent>
   <first>
        <a>123</a>
        <b>abc</b>                
        <c>
          <d>987</d>
          <e>
            <f>xxx</f>
            <f>yyy</f>
            <f>zzz</f>
          </e>
         </c>
    </first>
    <second>
         <a>456</a>
         <b>efg</b>             
         <c>
          <d>345</d>
          <e>
            <f>ttt</f>
            <f>hhh</f>
            <f>www</f>
          </e>
         </c>
     </second>
</parent>

Моя цель - надеяться на identify и print значение тега <d> и несколько <f>.

Вот моя первая попытка с помощью findall() найти тег <b>, но печатается пустое значение ..

import xml.etree.ElementTree as ET

root = ET.parse('test.xml').getroot()
b_tag = root.findall('first/b')
print b_tag

Может ли кто-нибудь, имеющий опыт в python, указать мне, что я сделал не так, чтобы я мог лучше понимаете, как использовать это api?

1 Ответ

0 голосов
/ 27 мая 2020

Ваш код отлично работает с b_tag, вам нужно только использовать поле .text. Итак, вот вся необходимая информация внутри <d> и <f>:

import xml.etree.ElementTree as ET

root = ET.parse('test.xml').getroot()
d_tags = root.findall('./*/c/d')
print([t.text for t in d_tags])
# ['987', '345']

f_tags = root.findall('./*/c/e/f')
print([t.text for t in f_tags])
# ['xxx', 'yyy', 'zzz', 'ttt', 'hhh', 'www']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...