我无法弄清楚如何在我的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测试,然后导致分解。
这种情况发生在各种数据类型上;媒体文件,文本字符串,整数等。
感谢您抽出时间阅读我的帖子。
答案 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条件的情况下开始分配值的虚拟方法。