解析HTML/XML并找到元素在原文中的位置
有没有办法在用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
谷歌发现了这个,大意是:对于格式不正确的文档来说,解析起来很困难,因为解析需要合成一些有效的标记,而这些标记在输入中并不存在。对于格式正确的文档来说是有可能的,但大多数解析库并不支持这个功能。