如何测试Umbraco属性是否为空

时间:2013-07-08 17:49:21

标签: xslt umbraco

我无法弄清楚如何在我的umbraco站点中测试非强制属性是否为空,并且如果所述属性为空,则当前我的页面会导致XSLT解析错误。我目前的代码很简单:

<xsl:variable name="media" select="umbraco.library:GetMedia(sectionImage, 0)" />
<xsl:if test="$media"> <!-- or $media != null -->
    <xsl:variable name="url" select="$media/umbracoFile" />
    <xsl:element name="img">
        <xsl:attribute name="src"><xsl:value-of select="$url" />
        </xsl:attribute>
    </xsl:element>
</xsl:if>

我正在运行Umbraco v6.0.6并且我正在使用umbraco wiki上提供的错误检查解决方案,http://our.umbraco.org/wiki/reference/umbracolibrary/getmedia

当我在C#中尝试类似的样式逻辑时,我发现测试变量$ media将具有诸如“umbraco.presentation.nodeFactory.Property”之类的值。这种填料含量会错误地绕过if测试,然后导致分解。

这种情况发生在各种数据类型上;媒体文件,文本字符串,整数等。

感谢您抽出时间阅读我的帖子。

2 个答案:

答案 0 :(得分:1)

umbraco.library:GetMedia无法返回null,如果没有媒体匹配,您可能会收到错误,例如

<error>No media is maching '123123'</error>

问题是您的代码有效,但您没有关闭&lt; xsl:attribute name =“src”&gt;你应该

<xsl:attribute name="src">
  <xsl:value-of select="$url" />
</xsl:attribute>

如果您出于某种原因确实希望确保其中有图像,则应编写“test”并在nodeTypeAlias中计算值

<xsl:variable name="media" select="umbraco.library:GetMedia(sectionImage, 0)" />
<xsl:if test="count($media[@nodeTypeAlias='Image']) > 0">
  <xsl:variable name="url" select="$media/umbracoFile" />
  <xsl:element name="img">
    <xsl:attribute name="src">
      <xsl:value-of select="$url" />
    </xsl:attribute>
  </xsl:element>
</xsl:if>

由于您使用零深度选择,因此xpath变得有点“奇怪”,如果您获取具有更大深度的媒体,则必须稍微调整计数

<xsl:variable name="media" select="umbraco.library:GetMedia(sectionImage, 0)" />
<xsl:if test="count($media/*[@nodeTypeAlias='Image']) > 0">
  ...
</xsl:if>

要测试是否选择了文件夹,只需检查文件夹

<xsl:variable name="media" select="umbraco.library:GetMedia(sectionImage, 0)" />
<xsl:if test="count($media[@nodeTypeAlias='Folder']) > 0">
  ...
</xsl:if>
祝你好运

答案 1 :(得分:0)

好的,所以最初的IF条件必须这样做:

 <xsl:if test = "sectionImage != ''">

XSLT / Xpath检查XML标记是否为空的方式。然后可以使用Eric Herlitz的解决方案,或者在没有辅助IF条件的情况下开始分配值的虚拟方法。