使用XPath在带有HelpNDoc自定义模板的XML文件中定位节点

使用XPath在带有HelpNDoc自定义模板的XML文件中定位节点,xml,pascal,helpndoc,Xml,Pascal,Helpndoc,我正在尝试增强与HelpNDoc一起使用的HTML模板。我发现缺少的一点是元描述标记对于所有页面都是相同的 模板文件是pascal和HTML的混合体。目前,这是模板中用于显示描述标签的数据: <meta name="description" content="<% print(HndProjects.GetProjectSummary()); %>" /> 但我不知道如何将这样的XPath与HelpNDoc Pascal脚本一起使

我正在尝试增强与HelpNDoc一起使用的HTML模板。我发现缺少的一点是
元描述
标记对于所有页面都是相同的

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

<meta name="description" content="<% print(HndProjects.GetProjectSummary()); %>" />
但我不知道如何将这样的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中,我试图编译脚本,但我得到了以下错误:


因此,我甚至不确定我是否能做我想做的事情,除非我错过了一些步骤。

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

请知道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
成为一个全局变量。然后,我只将数据文件读入这个列表一次,并在创建元描述时使用它。最后,我在脚本文件中的构建过程即将结束时释放列表

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))); %>" />