xslt aplica 2 plantillas con diferentes modos, en el mismo elemento conservando el orden definido en xml

Tengo un archivo xml con artículos. Quiero generar la lista de elementos según el atributo de vista y conservar el orden de los elementos. Para este propósito tengo xsl:templates con diferentes modos. El problema es que no puedo conservar el mismo orden que en xml. El xml es el siguiente:

   <item />
   <item view="new" />
   <item />
   <item view="new" />

las plantillas son:

<xsl:template match="item" mode="standart">
    <div class="standart_item"></div>
</xsl:template>

<xsl:template match ="item" mode="new">
    <div class="new_item"></div>
</xsl:template>

¿Cómo puedo aplicar diferentes plantillas para conservar el orden, lo mismo que en xml?

<div class="standart_item"></div>
<div class="new_item"></div>
<div class="standart_item"></div>
<div class="new_item"></div>

preguntado el 03 de mayo de 12 a las 07:05

1 Respuestas

Usar diferentes modos no parece ser la herramienta adecuada para el resultado que está tratando de lograr. Sugiero distinguir las plantillas por predicados:

<xsl:template match="item">
  <div class="standard_item"></div>
</xsl:template>

<xsl:template match="item[@view='new']">
  <div class="new_item"></div>
</xsl:template>

contestado el 03 de mayo de 12 a las 07:05

Tengo que volver a hacer coincidir los elementos dentro de las diferentes plantillas, por eso tengo que usar el modo - tylik

En este caso, también podría usar una sola plantilla que coincida con todos los elementos y distinguirlos con xsl:choose por ejemplo. Si eso tampoco es posible, debe elaborar un poco más sobre lo que realmente está tratando de hacer. - Martin

Gracias. Supongo que tengo que ir con xsl:choose - tylik

@tylik: Es muy probable que no sea necesario usar xsl:choose. Si explicas bien el problema (proporcionando suficientes datos), muchas personas podrán dar soluciones elegantes. - dimitre novachev

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.