for-each没有结果文本

时间:2009-10-30 10:52:38

标签: xpath foreach

我有一个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>

有人能告诉我怎么做吗?

谢谢,

马特

3 个答案:

答案 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);
    //...
}
}