0

我的目的是创建一个新闻列表,并且会在一些新闻上附加一个缩略图(news_teaserimage)。问题是如果我只在某些节点中选择媒体,我会得到一个 xslt 错误,并且不会生成任何代码。如果我在所有节点中选择媒体,那么它就可以工作。目的是无论是否有图像,代码都会生成节点。如果没有选择图像,则不会显示。

我究竟做错了什么?

<ul>

<xsl:for-each select="umbraco.library:GetXmlNodeById($source)/* [@isDoc and string(umbracoNaviHide) != '1']">
<xsl:variable name="media" select="umbraco.library:GetMedia(news_teaserimage, 0)"/>

  <li>
    <h2><xsl:value-of select="@nodeName"/></h2>
    <h5><xsl:value-of select="@createDate"/></h5>

<xsl:if test="news_teaserimage">
<img src="{$media/umbracoFile}" width="70" height="70" style="float: left; padding-right: 10px; padding-bottom: 10px;" />
</xsl:if>

      <xsl:value-of select="news_shorttext" disable-output-escaping="yes"/>
    <xsl:if test="news_largetext">
      <br />
<a style="float: left; clear: both; margin-top: -10px;" href="{umbraco.library:NiceUrl(@id)}">
      Read more
    </a>

</xsl:if>


  </li>
</xsl:for-each>
</ul>
4

2 回答 2

0

当您调用 GetMedia 的变量(在您的情况下为 news_teaserimage)中没有任何内容时调用 GetMedia 将导致 XSLT 错误,因为如果尚未选择媒体节点,则没有可获取的媒体。您只需要稍微重新调整您的代码即可使其正常工作。将分配“媒体”变量的代码行移动到 if 语句中,在该语句中检查 news_teaserimage 元素是否存在。这样,只有在实际存在值时才会调用它。

您可能还需要将 if 测试更改为:string-length(news_teaserimage) > 0,因为如果元素存在但为空,它可能会触发 if。

于 2012-04-10T09:57:15.557 回答
0

umbraco.library:GetMedia(news_teaserimage, 0)调用从xsl:variable标记移到xsl:if标记中,并将其包裹xsl:if在以下所有代码中li

<ul>
<xsl:for-each select="umbraco.library:GetXmlNodeById($source)/* [@isDoc and string(umbracoNaviHide) != '1']">

  <li>
  <xsl:if test="umbraco.library:GetMedia(news_teaserimage, 0)">
    <h2><xsl:value-of select="@nodeName"/></h2>
    <h5><xsl:value-of select="@createDate"/></h5>

    <img src="{$media/umbracoFile}" width="70" height="70" style="float: left; padding-right: 10px; padding-bottom: 10px;" />

    <xsl:value-of select="news_shorttext" disable-output-escaping="yes"/>

    <xsl:if test="news_largetext">
      <br />
      <a style="float: left; clear: both; margin-top: -10px;" href="{umbraco.library:NiceUrl(@id)}">
      Read more
      </a>
  </xsl:if>
  </li>
</xsl:for-each>
</ul>
于 2013-11-25T22:58:54.833 回答