首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用XPath定位具有HelpNDoc自定义模板的XML文件中的节点

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

Stack Overflow用户
提问于 2018-06-26 16:38:51
回答 1查看 125关注 0票数 0

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

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

代码语言:javascript
复制
<meta name="description" content="<% print(HndProjects.GetProjectSummary()); %>" />

我已经创建了一个映射XML文档,其中包含了所需的描述。示例:

代码语言:javascript
复制
<?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数据文件中获取这个值:

代码语言:javascript
复制
HelpTopics/Topic/ID[text()='<% HndProjects.GetProjectId(); %>'

但是我不知道如何在XPath脚本中使用这样的HelpNDoc。

更新

我试着添加了这段代码才能运行:

代码语言:javascript
复制
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内部,我试图编译脚本,但得到了以下错误:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 14:30:41

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

请知道HelpNDoc的脚本引擎只是pascal语言和库的一个子集。脚本语言中没有可用的XML库。也许可以使用第三方XML库,但这不是我们测试或支持的东西。 我们建议您使用更简单的结构,这些结构可以通过简单的代码(如逗号分隔(CSV)文件)轻松解析。

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

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

代码语言:javascript
复制
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;

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

代码语言:javascript
复制
<meta name="description" content="<% print(ReadFile(HndTopics.GetTopicHelpContext(HndGeneratorInfo.CurrentTopic))); %>" />

更新

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51047740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档