CHM中的XML / XSLT ALink菜单反向连接params

时间:2011-07-18 22:11:13

标签: xml xslt chm helpfile

过去几天我一直试图找出这个XSLT / XML问题(这是我有幸尝试修复的代码)。使用XSLT,我抓住XML标签中的内容“see”并尝试使用标签在Windows帮助文件中创建“see also”(或相关文件)ALink菜单。 $ filename是一个全局变量,所以说这是somefile.xml,$ filename是somefile.xml。

实际问题在于我尝试将文件链接在一起以创建ALink。 ({$ filename} _SEE_ALSO链接到node()_ SEE_ALSO},文件被链接...但是反转。所以说你有功能X,你希望它在“另请参阅“。通常,您会将<see>Function Y</see>放入函数X的文件中(因此函数X->函数Y)。但是,在下面的代码中,它的作用是在函数Y中显示函数X(函数X&lt; -Function Y) - 所以反过来。所以当你点击Function X的“See also”时,你会得到一个空白的弹出窗口,而在Function Y中,它会弹出“Function X”。

这些是XML标签:

<function>
 <showSeeAlso>
   <see>Tag1</see>
   <see>Tag2</see>
   <see>Tag3</see>
 </showSeeAlso>
</function>

这是XSLT:

<xsl:template match="showSeeAlso">
 <object id="seeAlso" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" codebase="HHCTRL.ocx#Version=4,72,8252,0">
    <param name="Command" value="ALink, MENU"/>
    <param name="Text" value="Text:See Also"/>
    <param name="Font" value="Arial,8pt,,,underline"/>
    <param name="Flags" value="1"/>
    <param name="Item1" value=""/>
    <param name="Item2" value="{$filename}_SEE_ALSO"/>
  </object>

<xsl:apply-templates select="see"/>
</xsl:template>

 <xsl:template match="see">
 <xsl:param name="name" select="."/>
  <object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
  <param name="ALink Name" value="{concat(node(),'_SEE_ALSO')}"/>
 </object>

</xsl:template>

任何/所有帮助都非常感激,这是我过去几天存在的祸根。

1 个答案:

答案 0 :(得分:0)

我不知道这是否会对其他人有所帮助,但我想出了一个解决方案。我从ALinks切换到相关主题,并修复了代码。结果如下:

XML:

<showSeeAlso/>
<see>tag1</see> 
<see>tag2</see>
<see>tag3</see>

XSLT:

  <xsl:if test="showSeeAlso">
    <object id="hhctrl" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" codebase="hhctrl.ocx#Version=6,1,7600,16385">
    <param name="Command" value="Related Topics, DIALOG"/>
    <param name="Text" value="Text:See Also"/>
    <xsl:apply-templates select="see"/>
   </object>
  </xsl:if>

  <xsl:template match="see">
    <xsl:variable name="tag" select="."/>
     <xsl:variable name="count">
  <xsl:number/>
 </xsl:variable>

 <param name="Item{$count}" value="{$tag};{$tag}.html"/>

 </xsl:template>