You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:45:03