0

我正在尝试增强与 HelpNDoc 一起使用的 HTML 模板。我发现缺少的一件事是meta description所有页面的标签都是相同的。

模板文件是 pascal 和 HTML 的混合体。目前这是模板中用于显示描述标签的数据:

<meta name="description" content="<% print(HndProjects.GetProjectSummary()); %>" />

我创建了一个包含所需描述的映射 XML 文档。例子:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<HelpTopics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Topic>
        <Caption>Overview</Caption>
        <ID>msa-overview</ID>
        <ContextID>0</ContextID>
        <Description>An introduction to Meeting Schedule Assistant.</Description>
    </Topic>
    <Topic>
        <Caption>Quick Start - Getting Started</Caption>
        <ID>msa-quick-start</ID>
        <ContextID>1</ContextID>
        <Description>A quick start guide to get you up and running with Meeting Schedule Assistant.</Description>
    </Topic>
    <Topic>
        <Caption>Using Meeting Schedule Assistant</Caption>
        <ID>msa</ID>
        <ContextID>2</ContextID>
        <Description>An overview of the menus in Meeting Schedule Assistant.</Description>
    </Topic>
</HelpTopics>

是否可以在此 HelpnDoc 脚本中使用 pascal 来读取 XML 文件?在他们的网站上,他们提供了有关的详细信息,HndProjects并提到:

function GetProjectId: string;

返回当前打开的项目 ID。

所以我基本上想从 XML 数据文件中获取这个值:

HelpTopics/Topic/ID[text()='<% HndProjects.GetProjectId(); %>'

但我不知道如何将这样的 XPath 与 HelpNDoc Pascal 脚本一起使用。

更新

我尝试添加此代码以开始:

function GetDescription(sTopicID: string): String;
var
    nodeTopic: TDOMNode;
    doc: TXMLDocument;
begin
    try
        // Read in the xml file
        ReadXMLFile(doc, '.\MSA-Help-Descriptions.xml');
        // Get the node
        //nodeTopic := doc.DocumentElement.FindNode(
        // How do we get the node at:  HelpTopics/Topic/ID[text()=sTopicID];
    finally
        doc.Free;
    end;
    GetDescription := 'xxxx';
end;

然后,在 HelpNDoc 中,我尝试编译脚本,但出现以下错误:

日志

所以我不确定我是否可以做我想做的事,除非我错过了一些步骤。

4

1 回答 1

0

我从软件作者那里得到了反馈:

请注意,HelpNDoc 的脚本引擎只是 pascal 语言和库的一个子集。脚本语言中没有可用的 XML 库。可以使用第三方 XML 库,但这不是我们测试或支持的。

我们建议您使用更简单的结构,这些结构可以通过简单的代码轻松解析,例如逗号分隔 (CSV) 文件。

因此,我创建了一个简单的文本文件,其中每一行代表一个元描述,并且行号与帮助主题的上下文 ID 匹配。

然后我修改了用于编译的pascal脚本:

function ReadFile(helpContextID: integer): string;
var
    FText  : TStringList;
begin
    FText := TStringList.Create;
    try
       FText.LoadFromFile('D:\My Programs\2017\MeetSchedAssist\HelpNDoc\HelpTopicDescriptions.txt');
       result := FText[helpContextID];
    finally
       FText.Free;
    end;
end;

最后,我进行了以下调用来设置元描述:

<meta name="description" content="<% print(ReadFile(HndTopics.GetTopicHelpContext(HndGeneratorInfo.CurrentTopic))); %>" />

更新

对于它的价值,我通过创建TStringList一个全局变量来改进代码。然后我只将数据文件读入这个列表一次,并在创建元描述时使用它。最后,我在脚本文件中的构建过程结束时释放了列表。

于 2018-06-28T14:30:41.540 回答