首页 > 解决方案 > 在lxml objectify中获取有序列表

问题描述

如果我有一个 XML 中的有序列表

<Boa>
    <Channels>
        <Channel name="Red"/>
        <Channel name="Green"/>
        <Channel name="Blue" />
    </Channels>
</Boa>

这段代码

from lxml import objectify

Boa = objectify.parse(self.xml).getroot()

只会让我

Boa.Channels.Channel

通道的单个条目。

如何在 lxml objectify 中将其作为有序列表?如果 lxml 期望自动进行转换,我也可以更改我的 XML 标记。

标签: pythonlxml

解决方案


objectify 有点奇怪,因为它试图将 xml 映射到 python 对象,这不是 100% 匹配,所以它必须妥协。

Boa.Channels.Channel是第一个Channel

>>> Boa.Channels.Channel.get('name')
'Red'

但同时它也可以作为Channels 的列表工作:

>>> Boa.Channels.Channel[0].get('name')
'Red'
>>> Boa.Channels.Channel[1].get('name')
'Green'
>>> Boa.Channels.Channel[2].get('name')
'Blue'
>>> [c.get('name') for c in Boa.Channels.Channel]
['Red', 'Green', 'Blue']

推荐阅读