我有 CHM 文件。我想提取目录(TOC)信息,如下所示:标题部分、主题名称、主题文件路径等。我注意到它的 HHC 文件具有与以下示例类似的信息:
主要帮助-Project.hhc
<UL> // its root
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Topic 1">
<param name="Local" value="Topics/topic1.htm">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="Topic 2">
<param name="Local" value="Topics/topic2.htm">
</OBJECT>
<OBJECT type="text/sitemap">
<param name="Merge" value="Heading-Section1.chm::/Heading-Section1.hhc">
</OBJECT>
是否有办法从此文件和其他 hhc 文件中提取标题部分、主题信息?
正如我从您非常短的 *.hhc 示例中看到的,我想给出一些提示。您的问题中也缺少所需的目标格式。
在 Microsoft HTML 帮助 CHM 文件中,您可以使用单独的帮助文件创建模块化项目。所有已编译帮助模块(.CHM 文件)的索引、全文搜索和目录项都会在运行时合并。打开例如文件Master.CHM,您将看到主+从帮助文件统一到一个帮助系统中。打开任何从属 CHM,您只会看到单个 CHM 帮助。
为了使从属模块目录在运行时与主模块目录合并,必须将“文件包含”块语句添加到主目录文件 (master.hhc) 中。例如:
<OBJECT type="text/sitemap">
<param name="Merge" value="slave1.chm::/slave1.hhc">
</OBJECT>
<OBJECT type="text/sitemap">
<param name="Merge" value="slave2.chm::/slave2.hhc">
</OBJECT>
对于单个
.chm
分别。 .hhc
文件无需“运行时合并”创建基本目录 -> 通过脚本或某些 XML 到 HTML 转换可以轻松导出 HTML。我使用 FAR HTML 等工具将 hhc 保存为 HTML,并通过 RegEx 和 Notepad++ 手动剪切。
在您的示例中,您显示了“Master.hhc”的一些代码行(例如您的
main Help-Project.hhc
)。每个模块 (Heading-Section1.chm
) 都需要自己的 *.hhc 文件。
因此您需要模块化 CHM 帮助文件的所有 .hhc 文件来提取标题部分、主题名称、主题文件路径等。
许多 CHM 解压工具都可以提取单个 hhc 文件。如果文件具有二进制目录,则 Free Pascal 发行版中的 chmls 实用程序具有 extracttoc 命令,用于尝试将二进制目录提取为 hhc。
不幸的是,Free Pascal CHM 工具还无法生成合并的 CHM 文件。我尝试了几次(主 CHM 和从 CHM 均如此),但结果被 Windows CHM 查看器拒绝。