Python - Разбор XML с повторяющимися тегами с использованием ElementTree - PullRequest
1 голос
/ 03 апреля 2020

У меня есть следующее XML содержимое:

<plist version="1.0">
<dict>
    <key>Version</key><integer>1</integer>
    <key>Sub Version</key><integer>2</integer>
    <dict>
        <key>1</key>
        <dict>
            <key>ID</key><integer>1</integer>
            <key>Name</key><string>Frank</string>
        </dict>
        <key>2</key>
        <dict>
            <key>ID</key><integer>2</integer>
            <key>Name</key><string>Richard</string>
        </dict>
        <key>3</key>
        <dict>
            <key>ID</key><integer>3</integer>
            <key>Name</key><string>Sophia</string>
        </dict>
    </dict>
    <key>Persons</key>
    <array>
        <dict>
            <key>Name</key><string>Persons</string>
            <key>Description</key><string>empty</string>
        </dict>
    </array>
</dict>
</plist>

Мне трудно получить имена, поскольку имена тегов XML одинаковы и не имеют атрибутов. До сих пор я пытался получить к нему доступ с помощью итерации по «второму диктату глубины», но я не могу получить только то, что хочу.

Что я получил:

from xml.etree import ElementTree as et

tree = et.parse("file.xml")
root = tree.getroot()

for i in root.find('dict').find('dict').iter('dict'):
    print ([j.text for j in i])

Вывод Я хочу:

Frank
Richard
Sophia

Кто-нибудь знает, как получить доступ к этим значениям с помощью таких тегов?

1 Ответ

1 голос
/ 03 апреля 2020

Попробуйте вместо этого использовать l xml:

from lxml import etree
plist = """your xml above"""

doc = etree.fromstring(plist)
doc.xpath('//dict/dict/key["name"]/following-sibling::string/text()')

вывод:

['Frank', 'Richard', 'Sophia']
...