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

如何用Python生成含语法高亮的XML内容.docx文件?

解决XML内容在docx中实现语法高亮的方案

核心思路

python-docx没有原生支持代码语法高亮功能,我们可以借助Pygments库解析XML的语法令牌,再手动为不同类型的令牌设置对应颜色样式,最终插入docx文档中,实现类似Notepad++的高亮效果。

步骤实现

1. 安装依赖

先安装所需的三个Python库:

pip install python-docx lxml pygments

2. 完整代码实现

from docx import Document
from docx.shared import Pt, RGBColor
from lxml import etree
from pygments import highlight
from pygments.lexers import XmlLexer
from pygments.token import Token

# 文档路径配置
store_location = "xyz.docx"
template_path = "abc.docx"
doc = Document(template_path)

# 读取并格式化XML文件
xml_et = etree.parse("example.xml")
xml_string = etree.tostring(xml_et, pretty_print=True, encoding=str)

# 用Pygments拆分XML语法令牌
lexer = XmlLexer()
tokens = list(lexer.get_tokens(xml_string))

# 定义XML语法高亮配色(匹配Notepad++常用风格)
style_map = {
    Token.Comment: RGBColor(0, 128, 0),        # 注释:绿色
    Token.Keyword: RGBColor(0, 0, 255),        # XML关键字:蓝色
    Token.Name.Tag: RGBColor(128, 0, 128),     # 标签名:紫色
    Token.Name.Attribute: RGBColor(255, 0, 0), # 属性名:红色
    Token.String: RGBColor(0, 128, 128),       # 属性值:蓝绿色
    Token.Text: RGBColor(0, 0, 0)              # 普通文本:黑色
}

# 添加带高亮的XML段落
para = doc.add_paragraph()
# 设置代码用等宽字体,保证排版整齐
base_run = para.add_run()
base_run.font.name = "Consolas"
base_run.font.size = Pt(10)

# 遍历令牌,逐个应用对应样式
for token_type, value in tokens:
    run = para.add_run(value)
    run.font.name = "Consolas"
    run.font.size = Pt(10)
    # 匹配样式,无定义则用默认黑色
    run.font.color.rgb = style_map.get(token_type, RGBColor(0, 0, 0))

# 保存最终文档
doc.save(store_location)

3. 批量处理多个XML文件

如果需要处理文件夹下的所有XML文件,添加遍历逻辑即可:

import os

# 指定XML文件所在文件夹
xml_folder = "你的XML文件夹路径"
for file_name in os.listdir(xml_folder):
    if file_name.endswith(".xml"):
        xml_path = os.path.join(xml_folder, file_name)
        # 读取当前XML文件
        xml_et = etree.parse(xml_path)
        xml_string = etree.tostring(xml_et, pretty_print=True, encoding=str)
        # 添加标题区分不同文件
        doc.add_heading(f"文件:{file_name}", level=2)
        # 重复上述令牌解析和样式应用逻辑...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:21:05