gpt4 book ai didi

python - 在 lxml 中查找元素结束标记的行号

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

在使用 lxml 解析 XML 文档时,我想找到特定标记的起始行号和结束行号。我可以使用 lxml.etree.Element 上的 sourceline 属性找到起始标记的位置,但是我很难找到结束标记的行号。

我尝试的一个小例子:

import lxml.etree as ET

xml_sample = b'''<?xml version="1.0" encoding="utf-8"?>
<collection>
<item>
<value>foo</value>
</item>
<item>
<value>
bar
</value>
</item>
</collection>'''

for el in ET.fromstring(xml_sample).getroottree().findall('//value'):
print('Found value "{el.text}" starting on line {el.sourceline} '
'and ending on line ???.'.format(el=el))

是否可以获取上述示例中value 元素的结束标记行号?

最佳答案

使用 xml.etree.ElementTree.tostring() 技巧:

...
root = ET.fromstring(xml_sample)
for el in root.findall('.//value'):
endline_num = el.sourceline + (len(ET.tostring(el).strip().split()) - 1)
print('Found value "{el.text}" starting on line {el.sourceline} '
'and ending on line {end_num}.'.format(el=el, end_num=endline_num))

输出:

Found value "foo" starting on line 4 and ending on line 4.
Found value "
bar
" starting on line 7 and ending on line 9.

关于python - 在 lxml 中查找元素结束标记的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47902528/

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