2009-10-30 5 views
1

나는 for-each를 가지고 있으며, 출력이 없으면 기본 텍스트를 표시하고 싶습니다. 만약 내가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> 

는 사람이 어떻게이 작업을 수행하는 제발 말할 수 있습니까?

<xsl:for-each select="xpath"> ... 

를 사용해서 같은 것을 수행 할 수 있습니다 : 당신을 가정

감사합니다,

매트

+0

죄송합니다. 충분히 구체적이지 않았습니다. 내가 가지고있는 경우 ... 일치하는 각 요소 결과에 대한 일부 내용. 내가하고 싶은 것은 : 일부 콘텐츠 일치하는 각 요소 결과에 대해 for-each가 일치하는 항목이없는 경우에 사용할 수있는 콘텐츠입니다.

답변

3

은이는 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> 

을 (그리고 중복) 당신은 아마도 xsl:variable, followin 같은 것을 사용할 수 있습니다. g (구문이 약간 잘못되었지만 대략적인 아이디어가 맞아야 함).

<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> 
+0

감사합니다. xpath 쿼리를 두 번 테스트하는 것보다 빠른 방법이 있습니까? –

+0

감사합니다. 변수를 사용하여 테스트 결과를 저장하지 않았습니다. :) –

+0

변수를 choose 블록 외부에 배치하십시오. – Dacto

-1

이 같은 s 번째는 좋은 것입니다 생각 :

If (x!=null) 
{ 
console.write("Default Text")} 
else 
{ 
foreach (var y in x) 
{ 

     Console.Writeline(y); 
    //... 
} 
} 
2

그렉 비치가 제안한 <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> 효율성을 위해 동일한 쿼리를 두 번 반복하지 않아도됩니다.

$elems에 노드가있는 경우에만 <xsl:for-each>이 실행되고 그렇지 않은 경우 <xsl:if>이 실행됩니다.

관련 문제