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

如何用xml.etree.ElementTree解析含HTML内容的XML文件

解决方案:将HTML内容提取为单个Token

要解决这个问题,我们需要对原代码做针对性修改——当遇到<LongDescription>标签时,把它内部的所有HTML内容(包括嵌套标签)序列化为一个完整的字符串,作为单个token加入列表,而不是递归拆分每个子标签。

修改后的代码

import xml.etree.ElementTree as ET
import re

def getTokens(xml_string_file):
    tokensList = []
    tree = ET.parse(xml_string_file)
    root = tree.getroot()
    tokensList.append('<component>')
    
    for child in root:
        firstTag = '<' + child.tag + '>'
        lastTag = '</' + child.tag + '>'
        tokensList.append(firstTag)
        
        # 专门处理LongDescription标签,将内部HTML转为单个token
        if child.tag == 'LongDescription':
            # 把该标签下的所有子元素序列化为完整HTML字符串
            html_content = ''.join([ET.tostring(elem, encoding='utf-8').decode('utf-8') for elem in child])
            tokensList.append(html_content)
        else:
            # 其他标签保持原有处理逻辑
            if child.text is None:
                tokensList.append('')
            elif re.findall(r"\n", child.text, re.DOTALL):
                tokensList += extractTags(root=child)
            else:
                tokensList.append(child.text)
        
        tokensList.append(lastTag)
    
    tokensList.append('</component>')
    return tokensList

def extractTags(root):
    tokensList = []
    for child in root:
        firstTag = '<' + child.tag + '>'
        lastTag = '</' + child.tag + '>'
        tokensList.append(firstTag)
        if child.text is None:
            tokensList.append('')
        elif re.findall(r"\n", child.text, re.DOTALL):
            tokensList += extractTags(root=child)
        else:
            tokensList.append(child.text)
        tokensList.append(lastTag)
    return tokensList

关键修改说明

  1. 识别特殊标签:在遍历根元素的子节点时,判断当前标签是否为LongDescription。
  2. 序列化HTML内容:使用ET.tostring()方法将LongDescription下的所有子元素(包括嵌套的<html>、<head>、<style>等)转换成完整的字符串,再将这个字符串作为单个token添加到列表中。
  3. 兼容原有逻辑:其他标签仍按照你原来的递归拆分逻辑处理,不影响原有功能。

效果验证

修改后,你的tokens列表中<LongDescription>对应的token会是完整的HTML内容,例如:

'<html><html> <head> <style type="text/css"> <!-- .style9 { color: #ffff33; background-color: #ff00ff } .style8 { color: #990099; background-color: #66ffcc } ... </style> </head> <body> </body> </html> </html>'

这个完整的HTML字符串会作为一个单独的元素存在于tokens列表中,符合你的需求。

内容的提问来源于stack exchange,提问作者Emna Jaoua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:03:29