使用XSL文件中的链接

时间:2012-05-03 14:40:21

标签: xslt hyperlink

我是XML的新手,所以希望我的解释会有意义。

我正在使用带有2个HTML文本部分的XSL文件,从文件中设置的2个模板中读取。

第一个文本和关联的模板是一个表,我在其中设置了一个链接。我希望链接指向一个属于第二个HTML文本/模板的图片。

表格中的链接设置为链接,带下划线等。但是点击时它不会去任何地方。

第二部分可以自行处理,例如,图片和文字出现。

但我无法弄清楚如何实际获得链接。我尝试了很多东西但到目前为止还没有任何工作。而且我不确定我是否非常接近并且可能需要改变一行代码。或者我是否需要做一些非常不同的事情。此外,没有错误消息,一切都显示良好,它只是链接本身不起作用。

 <xsl:template match="portion">
  <tr>
 <td valign="top"><xsl:value-of select="food-description"/></td>
 <td valign="top"><xsl:value-of select="food-number"/></td>
 <!--the following is the link text-->  
 <td valign="top"><a><xsl:attribute name="href">#<xsl:value-of select="portion-     photo/@file"/></xsl:attribute>
 <xsl:value-of select="portion-photo/@file"/></a><br/>
 </td>
 </tr>
 </xsl:template>


 <xsl:template match="portion-photo">
 <!--I know that this is the code that is not correct, however, believe it should      be something similar-->  
 <a><xsl:attribute name="portion-photo"><xsl:value-of select="./@file"/></xsl:attribute></a>  

 <p><xsl:value-of select="../food-description"/>
 <xsl:value-of select="./@file"/></p>

 <img>
   <xsl:attribute name="src"><xsl:value-of select="./@file"/></xsl:attribute>
   <xsl:attribute name="width"><xsl:value-of select="ceiling(./@w div v2)"/></xsl:attribute>
   <xsl:attribute name="height"><xsl:value-of select="ceiling(./@h div 2)"/></xsl:attribute>
  </img>
 </xsl:template>

1 个答案:

答案 0 :(得分:1)

以下内容应该有效。只需将缺少的名称属性添加到锚元素:

<xsl:template match="portion">
  ...
  <a href="#{portion-photo/@file}">
    <xsl:value-of select="portion-photo/@file"/>
  </a>
  ...
</xsl:template>

<xsl:template match="portion-photo">
  <a name="{@file}">
    <xsl:value-of select="@file"/>
  </a>
</xsl:template>

但是,您必须确保@file评估为有效的锚名称。如果所有文件属性的值都是唯一的,您还可以使用generate-id()创建保存ID:

<xsl:template match="portion">
  ...
  <a href="#{generate-id(portion-photo)}">
    <xsl:value-of select="portion-photo/@file"/>
  </a>
  ...
</xsl:template>

<xsl:template match="portion-photo">
  <a name="{generate-id()}">
    <xsl:value-of select="@file"/>
  </a>
</xsl:template>