gpt4 book ai didi

python - lxml eTree iterparse深度

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:44 25 4
gpt4 key购买 nike

我正在尝试解析以下格式的一些 xml:

<label>
<name></name>
<sometag></sometag>
<sublabels>
<label></label>
<label></label>
</sublabel>
</label>

用这个解析它

for event, element in etree.iterparse(gzip.GzipFile(f), events=('end', ), tag='label'):
if event == 'end':
name = element.xpath('name/text()')

产生空的 name 变量,因为

<sublabels>
<label></label>
<label></label>
</sublabel>

问题:

除了检查它是否为空之外,还有什么方法可以设置 iterparse 的深度或忽略子标签标签吗?

最佳答案

这对我有用,并受到之前答案的启发:

name = None
level = 0
for event, element in etree.iterparse(gzip.GzipFile(f), events=('end', 'start' ), tag='label'):
# Update current level
if event == 'start': level += 1;
elif event == 'end': level -= 1;
# Get name for top level label
if level == 0:
name = element.xpath('name/text()')

作为替代解决方案,解析整个文件并使用 xpath 获取顶部标签名称:

from lxml import html

with gzip.open(f, 'rb') as f:
file_content = f.read()
tree = html.fromstring(file_content)
name = tree.xpath('//label/name/text()')

关于python - lxml eTree iterparse深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38656008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com