如何用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
相关产品推荐
相关产品推荐

