解析HTML/XML并找到元素在原文中的位置

0 投票
2 回答
1619 浏览
提问于 2025-04-17 06:59

有没有办法在用Python解析html/xml的时候,找到文档中一个元素的原始位置,也就是它的开始和结束字符索引?

我查阅了lxml的文档,但没找到相关的信息。

例如:

<a>1</a><b>2</b>

...

print tree.find('b').original_position
# result: (9, 16)

2 个回答

0

你可以使用 Pawpaw 来获取有效 XML 文档中所有元素、属性、标签、文本等的字符索引。

代码:

import sys
sys.modules['_elementtree'] = None
import xml.etree.ElementTree as ET
from pawpaw import xml
text = """<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
</data>"""
root = ET.fromstring(text, parser=xml.XmlParser())
for e in root.find('.//'):
    print(f'{e.tag}: {e.ito:%span}')

输出:

rank: (72, 100)
year: (109, 126)
gdppc: (135, 156)
neighbor: (165, 205)
neighbor: (214, 258)
1

谷歌发现了这个,大意是:对于格式不正确的文档来说,解析起来很困难,因为解析需要合成一些有效的标记,而这些标记在输入中并不存在。对于格式正确的文档来说是有可能的,但大多数解析库并不支持这个功能。

撰写回答