Primero.... tienes un error en el XML, te faltó cerrar una etiqueta <subboton> Te quedaria el XML asi:
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<botonera>
<boton nombre="Quienes Somos" enlace="quienessomos.xml"/>
<boton nombre="Productos" enlace="">
<subBoton nombre="Piscinas" enlace="piscinas.xml"/>
<subBoton nombre="Fuentes" enlace="fuentes.xml"/>
<subBoton nombre="Bombas de Agua" enlace="piscinas.xml">
<subBoton nombre="Grupos de Incendio" enlace="piscinas.xml"/>
<subBoton nombre="Varios" enlace="piscinas.xml">
<subSubBoton nombre="Elementos varios" enlace=""/>
<subSubBoton nombre="mangueras" enlace=""/>
<subSubBoton nombre="tuberias" enlace=""/>
</subBoton>
</subBoton>
</boton>
<boton nombre="Servicios" enlace="servicios.xml"/>
<boton nombre="Consejos" enlace="consejos.xml"/>
<boton nombre="Enlaces" enlace="enlaces.xml"/>
</botonera>
Hice un ejemplo usando parte de tu código XSL para que lo entiendas. Crea los siguientes 3 archivos en una misma carpeta:
prueba0.xml
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="prueba.xsl"?>
<root>
Estoy en prueba0.xml
</root>
prueba.xml
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<botonera>
<boton nombre="Quienes Somos" enlace="quienessomos.xml"/>
<boton nombre="Productos" enlace="">
<subBoton nombre="Piscinas" enlace="piscinas.xml"/>
<subBoton nombre="Fuentes" enlace="fuentes.xml"/>
<subBoton nombre="Bombas de Agua" enlace="piscinas.xml">
<subSubBoton nombre="Grupos de Incendio" enlace="piscinas.xml"/>
<subSubBoton nombre="Varios" enlace="piscinas.xml">
<subSubSubBoton nombre="Elementos varios" enlace=""/>
<subSubSubBoton nombre="mangueras" enlace=""/>
<subSubSubBoton nombre="tuberias" enlace=""/>
</subSubBoton>
</subBoton>
</boton>
<boton nombre="Servicios" enlace="servicios.xml"/>
<boton nombre="Consejos" enlace="consejos.xml"/>
<boton nombre="Enlaces" enlace="enlaces.xml"/>
</botonera>
prueba.xsl
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="comunXml" select="document('prueba.xml')"/>
<xsl:template match="root">
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
<ul>
<xsl:for-each select="$comunXml//boton">
<!-- Ahora estas en prueba.xml, por tanto no tienes
+- pq hacer referencia a la variable $comunXml otra vez
+- hasta que salgas del bucle
-->
<li>
<b>BOTÓN:<xsl:value-of select="@nombre" /></b><br />
<xsl:variable name="pos1">
<xsl:value-of select="position()-1"/>
</xsl:variable>
Position:<xsl:value-of select="$pos1" /><br />
<xsl:variable name="numElem1">
<xsl:value-of select="count(subBoton)"/>
</xsl:variable>
Núm. subbotones:<xsl:value-of select="$numElem1" /><br />
<ul>
<xsl:for-each select="subBoton">
<li>
<b>SUBBOTÓN:<xsl:value-of select="@nombre" /></b><br />
<xsl:variable name="pos2">
<xsl:value-of select="number(position())-1"/>
</xsl:variable>
Position:<xsl:value-of select="$pos2" /><br />
<xsl:variable name="numElem2">
<xsl:value-of select="count(subBoton)"/>
</xsl:variable>
Numero de subbotones:<xsl:value-of select="$numElem2" /><br />
<ul>
<xsl:for-each select="subSubBoton">
<li>
<b>SUBSUBBOTÓN:<xsl:value-of select="@nombre" /></b><br />
<xsl:variable name="pos3">
<xsl:value-of select="number(position())-1"/>
</xsl:variable>
Position:<xsl:value-of select="$pos3" /><br />
<xsl:variable name="numElem3">
<xsl:value-of select="count(subSubBoton)"/>
</xsl:variable>
Numero de subSubBotones:<xsl:value-of select="$numElem3" /><br />
<ul>
<xsl:for-each select="subSubSubBoton">
<li>
<b>SUBSUBBOTÓN:<xsl:value-of select="@nombre" /></b><br />
<xsl:variable name="pos4">
<xsl:value-of select="number(position())-1"/>
</xsl:variable>
Position:<xsl:value-of select="$pos4" /><br />
<xsl:variable name="numElem4">
<xsl:value-of select="count(subSubSubBoton)"/>
</xsl:variable>
Numero de subSubSubBotones:<xsl:value-of select="$numElem4" /><br />
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
</xsl:template>
</xsl:stylesheet>
He quitado de tu XSL la llamada que haces a new seccion() porque no se realmente que lenguaje usas ahi.. bueno, que me estorbaba
para explicarte lo que tenias que hacer.
Al entrar en el primer for-each, sí indicas la variable en la que has cargado el xml de prueba.xml. Una vez que ya estas en ese xml, no te hace falta indicar que te refieres a etiquetas de prueba.xml porque estas "dentro".
Una vez que te salgas del bucle mas externo, sales de prueba.xml
. Si quieres volver a entrar debes hacer lo mismo.
Si no entiendes algo pues ya sabes.. pregunta pregunta.
Para probar el ejemplo tan solo tienes que abrir el prueba0.xml en el IExplorer.
Una opinión personal... viendo que <boton>, <subBoton>, <subSubBoton>, <subSubSubBoton>, etc tienen la misma informacion y que ademas tienen una relacion de padres/hijos/nietos... y eso es una burrada hacerlo asi
... podrias simplificar aun mas tu XML y sobre todo el XSL llamandolas de la misma forma, ya que si quieres indicar con subboton que es un hijo de boton, ya lo haces con la estrucutra jerarquica que tienes en el XML.
Te pongo como quedaria el codigo:
prueba.xml
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<botonera>
<boton nombre="Quienes Somos" enlace="quienessomos.xml"/>
<boton nombre="Productos" enlace="">
<boton nombre="Piscinas" enlace="piscinas.xml"/>
<boton nombre="Fuentes" enlace="fuentes.xml"/>
<boton nombre="Bombas de Agua" enlace="piscinas.xml">
<boton nombre="Grupos de Incendio" enlace="piscinas.xml"/>
<boton nombre="Varios" enlace="piscinas.xml">
<boton nombre="Elementos varios" enlace=""/>
<boton nombre="mangueras" enlace=""/>
<boton nombre="tuberias" enlace=""/>
</boton>
</boton>
</boton>
<boton nombre="Servicios" enlace="servicios.xml"/>
<boton nombre="Consejos" enlace="consejos.xml"/>
<boton nombre="Enlaces" enlace="enlaces.xml"/>
</botonera>
prueba.xsl
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="comunXml" select="document('prueba.xml')"/>
<xsl:template match="root">
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
<xsl:apply-templates select="$comunXml//boton" />
<p><font color="#FF0000"><xsl:value-of select="." /></font></p>
</xsl:template>
<xsl:template match="boton">
<ul>
<li>
<b>BOTÓN:<xsl:value-of select="@nombre" /></b><br />
Position:<xsl:value-of select="position()-1"/><br />
Núm. subbotones:<xsl:value-of select="count(boton)" /><br />
<xsl:for-each select="boton">
<xsl:apply-templates select="." />
</xsl:for-each>
</li>
</ul>
</xsl:template>
</xsl:stylesheet>
Suerte!!