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

如何从HHC文件提取CHM文档的目录(TOC)相关信息?

从CHM的HHC文件提取目录信息的方法

HHC是CHM文件的目录定义文件,基于HTML结构,你看到的<UL>是目录层级容器,<LI>对应单个目录条目,<OBJECT>里的参数分别对应:Name是标题、Local是文件路径、Merge则是引用的其他HHC子目录文件。要提取Heading-Section(层级)、Topic-Name、Topic-File-Path,有几种可行的方法:

一、用CHM专用工具提取(简单高效)

  • 7-Zip + CHM Explorer组合:
    1. 把CHM文件当成压缩包,用7-Zip解压到本地文件夹,就能获取所有关联的HHC、HTM文件。
    2. 打开CHM Explorer,加载解压后的主HHC文件,工具会自动识别并解析Merge引用的子HHC文件。
    3. 选择导出目录为CSV或纯文本格式,就能直接得到包含层级、标题、文件路径的完整目录数据。

二、写Python脚本批量解析(适合大量文件)

利用HTML解析库递归处理所有HHC文件,自动合并关联内容,示例代码如下:

from bs4 import BeautifulSoup
import os
import csv

def parse_hhc(hhc_path, parent_section=""):
    results = []
    # 读取HHC文件
    with open(hhc_path, 'r', encoding='utf-8') as f:
        soup = BeautifulSoup(f, 'html.parser')
    
    for obj in soup.find_all('object', type='text/sitemap'):
        name_param = obj.find('param', {'name': 'Name'})
        local_param = obj.find('param', {'name': 'Local'})
        merge_param = obj.find('param', {'name': 'Merge'})

        if name_param and local_param:
            # 提取普通主题条目
            topic_name = name_param['value']
            topic_path = local_param['value']
            # 拼接层级路径
            section = f"{parent_section} > {topic_name}" if parent_section else topic_name
            results.append({
                'Heading-Section': section,
                'Topic-Name': topic_name,
                'Topic-File-Path': topic_path
            })
        elif merge_param:
            # 递归解析合并的子HHC文件
            merge_info = merge_param['value']
            # 从Merge参数中提取子HHC文件名(格式:xxx.chm::/xxx.hhc)
            sub_hhc_name = merge_info.split('::/')[-1]
            sub_hhc_path = os.path.join(os.path.dirname(hhc_path), sub_hhc_name)
            if os.path.exists(sub_hhc_path):
                results.extend(parse_hhc(sub_hhc_path, parent_section))
    
    return results

# 执行解析并导出CSV
if __name__ == "__main__":
    main_hhc_path = "替换成你的主HHC文件路径"
    toc_data = parse_hhc(main_hhc_path)
    
    with open('chm_toc.csv', 'w', newline='', encoding='utf-8') as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=['Heading-Section', 'Topic-Name', 'Topic-File-Path'])
        writer.writeheader()
        writer.writerows(toc_data)

使用时把main_hhc_path替换成你的主HHC文件路径,运行后会生成chm_toc.csv,里面就是整理好的目录数据。

三、手动解析(适合小体量HHC文件)

用VS Code、Notepad++这类支持代码折叠的文本编辑器打开主HHC文件,按照<UL>/<LI>的层级梳理目录结构:

  • 遇到Name和Local参数,直接提取标题和路径,按层级记录成表格。
  • 遇到Merge参数,找到对应的子HHC文件,重复上述步骤,把内容合并到主目录里即可。

内容的提问来源于stack exchange,提问作者user5005768-hd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:52:53