2009-03-04 19 views
5

Mi código genera el siguiente código XML:¿Cómo se prueba cero registros cuando se usa <xsl: for-each>?

<person_app> 
    <person_data> 
    <person> 
     ...person details here... 
    </person> 
    </person_data> 
</person_app> 

mediante XSLT, que analizar los registros de personas de la siguiente manera:

<xsl:template match="/person_app/person_data"> 
    <xsl:for-each select="person"> 
     ...generate person HTML... 
    </xsl:for-each> 
</xsl:template> 

Sin embargo, en los casos cuando recibo cero personas, me gustaría mostrar "No se encontraron registros" (o algo similar). Cuando la aplicación devuelve cero registros, se asemeja a la de XML lo siguiente:

<person_app/> 

Para resumir, cómo puedo probar para un conjunto de resultados vacío cuando uso < xsl: for-each/> para analizar mis registros de persona? He intentado lo siguiente sin éxito:

<xsl:if test="not(person)"> 
    <div style="font-size:18pt"><xsl:text>No records found</xsl:text></div> 
</xsl:if> 
+0

Uf. Lo averigué. No puede coincidir con la plantilla cuando no hay registros. – Huuuze

Respuesta

7

Algo como esto:

<xsl:choose> 
    <xsl:when test="person"> 
    <xsl:for-each select="person"> 
     ...generate person HTML... 
    </xsl:for-each> 
    </xsl:when> 
    <xsl:otherwise> 
    <div style="font-size:18pt"><xsl:text>No records found</xsl:text></div> 
    </xsl:otherwise> 
</xsl:choose> 
+0

Sin dados. Eso tampoco funcionó. – Huuuze

+0

Extraño, debería haberlo hecho. – andynormancx

+0

Estoy de acuerdo. Incluso rompí las cosas en pedazos muy simples y aún nada. – Huuuze

2
<xsl:template match="/person_app/person_data"> 
    <xsl:if test="count(person) = 0"> 
    <div style="font-size:18pt"><xsl:text>No records found</xsl:text></div> 
    </xsl:if> 
    <xsl:for-each select="person"> 
     ...generate person HTML... 
    </xsl:for-each> 
</xsl:template> 
Cuestiones relacionadas