Filtrado de elementos repetidos
Publicado por Ampi (2 intervenciones) el 16/02/2006 14:01:58
Hola a todos:
Hace poco que empecé a trabajar con xml/xsl y tengo una duda que no sé cómo resolver. Espero que alguien me pueda ayudar.
Tengo el siguiente xml:
<producto>
<codigo>123</codigo>
<descripcion>
<cadena lenguaje="es"> Descripcion en Español </cadena>
<cadena lenguaje="en"> Descripcion en Ingles </cadena>
</descripcion>
</producto>
-------
Lo que quiero hacer es mostrar la descripcion del producto. Si estoy en la versión española de mi aplicación, selecciono que muestre la descripción en español:
<xsl:if test="descripcion/cadena/@lenguaje='es' ">
<xsl:value-of select="."/>
</xsl:if>
Cuando ejecuto la versión en inglés de mi aplicación, quiero que muestre la descripción en inglés, y en caso de no existir, la de español, pero si hago esto:
<xsl:for-each select="descripcion/cadena">
<xsl:choose>
<xsl:when test="@lenguaje='en' ">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
... falla en el momento en el que tengo ambas descripciones. Si solo tengo la de español y no hay inglesa, no hay problema, me escribe la española, pero si tengo las dos, al encontrarse dos veces con cadena, siempre se me cumple o una condicion o la otra.
¿Qué puedo hacer para que en caso de estar las dos, solo se quede con la inglesa? He probado incluso el uso de variables, pero al ser locales no acabo de obtener el resultado que quiero.
Os agradeceria mucho que me ayudaseis.
Saludos.
Hace poco que empecé a trabajar con xml/xsl y tengo una duda que no sé cómo resolver. Espero que alguien me pueda ayudar.
Tengo el siguiente xml:
<producto>
<codigo>123</codigo>
<descripcion>
<cadena lenguaje="es"> Descripcion en Español </cadena>
<cadena lenguaje="en"> Descripcion en Ingles </cadena>
</descripcion>
</producto>
-------
Lo que quiero hacer es mostrar la descripcion del producto. Si estoy en la versión española de mi aplicación, selecciono que muestre la descripción en español:
<xsl:if test="descripcion/cadena/@lenguaje='es' ">
<xsl:value-of select="."/>
</xsl:if>
Cuando ejecuto la versión en inglés de mi aplicación, quiero que muestre la descripción en inglés, y en caso de no existir, la de español, pero si hago esto:
<xsl:for-each select="descripcion/cadena">
<xsl:choose>
<xsl:when test="@lenguaje='en' ">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
... falla en el momento en el que tengo ambas descripciones. Si solo tengo la de español y no hay inglesa, no hay problema, me escribe la española, pero si tengo las dos, al encontrarse dos veces con cadena, siempre se me cumple o una condicion o la otra.
¿Qué puedo hacer para que en caso de estar las dos, solo se quede con la inglesa? He probado incluso el uso de variables, pero al ser locales no acabo de obtener el resultado que quiero.
Os agradeceria mucho que me ayudaseis.
Saludos.
Valora esta pregunta


0