Python使用ElementTree解析带有重复标记的XML

2024-04-24 05:52:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下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标记的名称都是相同的,并且没有属性。 到目前为止,我试图通过“第二深度dict”使用迭代访问它,但我无法检索到我想要的内容

我得到的是:

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

有人知道如何使用这些标签访问这些值吗


Tags: keyfranknameidrichard内容stringversion
1条回答
网友
1楼 · 发布于 2024-04-24 05:52:56

请改用lxml进行尝试:

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']

相关问题 更多 >