lxml遍历TEI XML时无法获取p标签内ref节点后文本如何解决
问题原因
在lxml的XML元素模型中,文本分为两类存储:
- 元素的
text属性:存储元素起始标签到第一个子元素/闭合标签之间的文本,你案例中p标签内<ref>之前的text before ref就属于p标签的text属性,因此可以正常检索到 - 元素的
tail属性:存储元素闭合标签到下一个同级元素/父元素闭合标签之间的文本,你案例中最后一个<ref>标签之后的text after ref属于该<ref>标签的tail属性,你之前的代码只判断了text属性,所以无法检索到包含“after”的这段内容
解决方法
遍历节点时同时检查text和tail两个属性即可,修改后的代码如下:
from lxml import etree import os import csv from shutil import copyfile import pandas as pd teins = {'tei':'http://www.tei-c.org/ns/1.0'} #xml结构命名空间定义 searchterm = "after" #替换为你要检索的关键词 filepath = "./test.xml" with open(filepath,'r', encoding='utf8') as file: try: tree = etree.parse(file) root = etree.XML(etree.tostring(tree)) textNode = root.find(".//tei:text",teins) for elem in textNode.iter(): # 检查元素自身的text内容 if elem.text: if searchterm.lower() in elem.text.lower(): print(elem.text) # 新增检查元素的tail内容 if elem.tail: if searchterm.lower() in elem.tail.lower(): print(elem.tail) except Exception as e: print(str(e))
修改后检索关键词“after”即可正常输出对应的text after ref内容。
内容的提问来源于stack exchange,提问作者Water
相关产品推荐
相关产品推荐

