/ / XSL Holding incremented Value - xml, xslt, mapeo

XSL Holding Valor incrementado - mapeo xml, xslt

Sabiendo que no puede incrementar un valor si cumple una determinada condición, ¿cuál es el enfoque de esta lógica?

<xsl:for-each select="(//node())">

if(node-name==test1)
<tag>value of (How many tag elements already exists)</tag>

if(node-name==test2)
<tag>value of (How many tag elements already exists)</tag>

if(node-name==test3)
<tag>value of (How many tag elements already exists)</tag>
</xsl:for-each>

Entonces, si test3 solo fuera cierto, el valor sería 1 para el valor de la etiqueta. Esto también es cierto si solo una de las tres pruebas fue verdadera.

<tag>1</tag>

Si todo fuera verdad entonces iría

<tag>1</tag>
<tag>2</tag>
<tag>3</tag>

Si dos fueran ciertas, solo habría 2 etiquetas y 1 y 2 serían los valores para ellas.

<tag>1</tag>
<tag>2</tag>

Respuestas

0 para la respuesta № 1

Es muy difícil hacer ingeniería inversa un requisitoDe código incorrecto (o pseudo-código). En su código, el procesamiento de un conjunto de entrada da como resultado la creación de una serie de "elementos de etiqueta" (terminología extraña para "nodos de elemento con el nombre local" etiqueta ""). El número de estos que "ya existen" en cualquier punto es impredecible, ya que depende completamente del orden de ejecución, que no está definido por la especificación. Pero imaginemos que esto no fue un xsl: para cada uno, pero hay algún tipo de procedimiento, secuencial para cada uno en el que se garantiza que los elementos se procesarán uno por uno en orden. Si esa es la semántica que tenía en mente para su pseudocódigo, entonces necesita recursión:

<xsl:template name="process-items">
<xsl:param name="items"/>
<xsl:param name="tags-created"/>
<xsl:variable name="head" select="$items[1]"/>
<xsl:variable name="tail" select="$items[position() > 1]"/>
<xsl:if test="$head">
<xsl:choose>
<xsl:when test="self::tag1 or self::tag2">
<tag><xsl:value-of select="$tags-created"/></tag>
<xsl:call-template name="process-items">
<xsl:with-param name="items" select="$tail"/>
<xsl:with-param name="tags-created select="$tags-created+1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="process-items">
<xsl:with-param name="items" select="$tail"/>
<xsl:with-param name="tags-created select="$tags-created"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>

Y luego llamar a esto con los parámetros iniciales. //node() y 0.

En 2.0 puede hacer lo mismo con una función recursiva, que es el mismo principio pero mucho menos detallado, y en 3.0 puede usar xsl: iterar.