Python: как найти в XML-файле список элементов, а затем распечатать их - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть XML-файл, который мне нужно проанализировать.Это ниже: Он называется "fttk.xml"

<root>
    <ls>
        this is the ls 
    <a>
        this is the ls -a 
    </a>
    <l>
        this is the ls -l 
    </l>
    </ls>
    <dd>
        this is the dd 
        <a>
        this is the dd -a 
        </a>
        <l>
        this is the dd -l 
        </l>
    </dd>
</root>

Довольно просто.Я хочу иметь возможность печатать текст в тегах "ls" или "dd".Затем распечатайте теги под ними, если они указаны.

До сих пор мне удавалось найти тег «ls» или «dd» в XML и распечатать текст внутри тега.Я сделал это с помощью этого кода:

import xml.etree.ElementTree as ET

command = "ls"

fttkXML = ET.parse('fttk.xml') #parse the xml file into an elementtree
findCommand = fttkXML.find(command) #find the command in the elementtree
if findCommand != None:
    print (findCommand.text) #prints that tag's text

С этим я сэкономил все между тегами "ls" ... "/ ls".Теперь я хочу найти два флага («a» и «l») под ними, если они указаны, и распечатать их.Теги представлены в виде списка следующим образом:

switches = ["a", "l"]

Однако я попытался найти в ElementTree что-то, что позволило бы мне искать эти теги из списка и распечатывать их отдельно, однако,команды 'find' и 'findall' для ElementTree или Element возвращают «список неприменимых типов», когда я пытаюсь передать ему список «переключателей».

Итак, как мне искать список тегов?и распечатать текст для каждого тега?

Спасибо за ваше время.

С наилучшими пожеланиями, J

1 Ответ

2 голосов
/ 20 февраля 2012

Вы можете перебирать детей тега:

import xml.etree.ElementTree as ET

command = "ls"
switches = ["a", "l"]

fttkXML = ET.parse('fttk.xml') #parse the xml file into an elementtree
findCommand = fttkXML.find(command) #find the command in the elementtree

if findCommand != None:
    print findCommand.text        #prints that tag's text
    for sub in list(findCommand): # find all children of command. In older versions use findCommand.getchildren()
        if sub.tag in switches:   # If child in switches
            print sub.text        # print child tag's text
...