我有一个for-each,当没有任何输出时,我想显示一些默认文本。
如果我有......
<xsl:for-each select='xpath'> Some content for each matching element result. </xsl:for-each>
我想要的是:
<xsl:for-each select='xpath'>
<xsl:output-this-when-there-is-content> Some content for each matching element result. </xsl:output-this-when-there-is-content>
<xsl:no-results-output> Some content for when the for-each finds no matches. </xsl:no-results-output>
</xsl:for-each>
有人能告诉我怎么做吗?
谢谢,
马特
答案 0 :(得分:3)
假设你有:
<xsl:for-each select="xpath"> ...
你可以这样做:
<xsl:choose>
<xsl:when test="xpath">
<xsl:for-each select="xpath"> ...
</xsl:when>
<xsl:otherwise>
<xsl:text>Some default text</xsl:text>
</xsl:otherwise>
</xsl:choose>
为了避免对XPath(和重复)进行双重测试,您可以使用xsl:variable
,类似于以下内容(语法可能有点不对,但粗略的想法应该是正确的。)
<xsl:choose>
<xsl:variable name="elems" select="xpath"/>
<xsl:when test="$elems">
<xsl:for-each select="$elems"> ...
</xsl:when>
<xsl:otherwise>
<xsl:text>Some default text</xsl:text>
</xsl:otherwise>
</xsl:choose>
答案 1 :(得分:2)
为了避免Greg Beech提出的<xsl:choose>
解决方案的详细程度,您可以这样做:
<xsl:variable name="elems" select="xpath"/>
<xsl:for-each select="$elems">
<!-- ... -->
</xsl:for-each>
<xsl:if test="not($elems)">
<xsl:text>Some default text</xsl:text>
</xsl:if>
<xsl:variable>
是为了提高效率,它避免了两次执行相同的查询。
<xsl:for-each>
仅在$elems
中有任何节点时运行,<xsl:if>
仅在没有{。}}的情况下运行。
答案 2 :(得分:-1)
我认为这样会很好:
If (x!=null)
{
console.write("Default Text")}
else
{
foreach (var y in x)
{
Console.Writeline(y);
//...
}
}