xslt - online - xsl if else
Expresión XSLT para verificar si la variable pertenece al conjunto de elementos (2)
Si su procesador es compatible con XPath 2.0, entonces puede comparar $k
a una secuencia como la siguiente:
<xsl:if test="$k = (7, 8, 9)">
Incluso podría utilizar el operador de rango en este caso particular:
<xsl:if test="$k = (7 to 9)">
No hay necesidad de un tipo explícito de conversión. Probado con Saxon-HE 9.8.0.12N (XSLT 3.0).
Ejemplo XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node>5</node>
<node>6</node>
<node>7</node>
<node>9</node>
<node>10</node>
<node>79</node>
<node>8</node>
</root>
Hoja de estilo:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="node"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node">
<xsl:variable name="k" select="text()"/>
<xsl:if test="$k = (7 to 9)">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Resultado:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node>7</node>
<node>9</node>
<node>8</node>
</root>
Tengo un código como este:
<xsl:if test="$k=''7'' or $k = ''8'' or $k = ''9''">
¿Hay alguna manera de poner esta expresión en una forma, como, por ejemplo, SQL
k IN (7, 8, 9)
Ty :)
XSLT / XPath 1.0:
<!-- a space-separated list of valid values -->
<xsl:variable name="list" select="''7 8 9''" />
<xsl:if test="
contains(
concat('' '', $list, '' ''),
concat('' '', $k, '' '')
)
">
<xsl:value-of select="concat(''Item '', $k, '' is in the list.'')" />
</xsl:if>
Puede usar otros separadores si es necesario.
En XSLT / XPath 2.0 podrías hacer algo como:
<xsl:variable name="list" select="fn:tokenize(''7 8 9'', ''/s+'')" />
<xsl:if test="fn:index-of($list, $k)">
<xsl:value-of select="concat(''Item '', $k, '' is in the list.'')" />
</xsl:if>
Si puede usar la estructura del documento para definir su lista, podría hacer:
<!-- a node-set defining the list of currently valid items -->
<xsl:variable name="list" select="/some/items[1]/item" />
<xsl:template match="/">
<xsl:variable name="k" select="''7''" />
<!-- test if item $k is in the list of valid items -->
<xsl:if test="count($list[@id = $k])">
<xsl:value-of select="concat(''Item '', $k, '' is in the list.'')" />
</xsl:if>
</xsl:template>