从 HHC 文件中提取标题列表及其包含的页面信息

问题描述 投票:0回答:2

我有 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 文件中提取标题部分、主题信息?

chm html-help
2个回答
1
投票

正如我从您非常短的 *.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 文件来提取标题部分、主题名称、主题文件路径等。


0
投票

许多 CHM 解压工具都可以提取单个 hhc 文件。如果文件具有二进制目录,则 Free Pascal 发行版中的 chmls 实用程序具有 extracttoc 命令,用于尝试将二进制目录提取为 hhc。

不幸的是,Free Pascal CHM 工具还无法生成合并的 CHM 文件。我尝试了几次(主 CHM 和从 CHM 均如此),但结果被 Windows CHM 查看器拒绝。

© www.soinside.com 2019 - 2024. All rights reserved.