1

我对 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>
4

1 回答 1

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计算结果为有效的锚名称。如果所有文件属性的值都是唯一的,您还可以使用以下命令创建保存 ID generate-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>
于 2012-05-03T15:16:00.563 回答