Python - 使用 ElementTree 解析带有重复标签的 XML
Python - Parse XML with repeated tags using ElementTree
我有以下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 标签名称完全相同并且没有属性。
到目前为止,我已经尝试在 "second depth 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
有谁知道如何使用此类标签访问这些值?
改用 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']
我有以下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 标签名称完全相同并且没有属性。 到目前为止,我已经尝试在 "second depth 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
有谁知道如何使用此类标签访问这些值?
改用 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']