我正在尝试增强与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(); %>'
但是我不知道如何在HelpNDoc Pascal脚本中使用这样的XPath。
我尝试添加此代码以开始工作:
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内,我尝试编译脚本,但出现以下错误:
所以我不确定我是否还能做我想做的事情,除非我错过了一些步骤。
答案 0 :(得分: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
成为全局变量来改进了代码。然后,我仅将数据文件读入此列表一次,并将其用于创建元描述。最后,我在脚本文件的构建过程结束时释放了列表。