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

呼び出している変数(この場合はnews_teaserimage)に何もないときにGetMediaを呼び出すと、メディアノードが選択されていない場合に取得するメディアがないため、XSLTエラーが発生します。コードを機能させるには、コードを少し再調整する必要があります。「media」変数を割り当てるコード行を、news_teaserimage要素が存在するかどうかを確認するifステートメントに移動します。そうすれば、実際に値が存在する場合にのみ呼び出されます。

また、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:ifli

<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 に答える