vv1984
16-09-2008, 15:53
Ciao a tutti, ho la seguente lista in formato xml (che contiene un sottoinsieme di tag appartenenti ad xhtml):
<opzioni>
<ul>
<li class="layout" id="layout_1.css">layout_1.css
<ul>
<li>carpa_11.css</li>
<li>carpa_12.css</li>
</ul>
</li>
<li class="layout" id="layout_2.css">layout_2.css
<ul>
<li>carpa_21.css</li>
<li>carpa_22.css</li>
</ul>
</li>
</ul>
</opzioni>
Vorrei riuscire a trasformarlo in questo:
<select>
<optgroup label="layout1.css">
<option value ="carpa_11.css">carpa_11.css</option>
<option value ="carpa_12.css">carpa_11.css</option>
</optgroup>
<optgroup label="layout2.css">
<option value ="carpa_21.css">carpa_21.css</option>
<option value ="carpa_22.css">carpa_22.css</option>
</optgroup>
</select>
Ho provato un po' di tutto, il tentativo che piu ci va vicino č questo
(ma il problema č che optgroup non deve avere un nodo di testo al suo interno che ne definisca il nome, bensė un attributo "value" con tale valore.
Riesco a settare l'attributo in questione, ma non riesco a rimuovere il nodo di testo..):
<xsl:template match="opzioni">
<div class="marcatore-poliwiki" id="opzioni" >
<xsl:apply-templates select="./ul"/>
</div>
</xsl:template>
<xsl:template match="opzioni/ul">
<div id="opzioni" class="marcatore-poliwiki">
<select>
<xsl:apply-templates/>
</select>
</div>
</xsl:template>
<xsl:template match="opzioni/ul/li">
<optgroup>
<xsl:apply-templates/>
</optgroup>
</xsl:template>
<xsl:template match="opzioni/ul/li/ul">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="opzioni/ul/li/ul/li">
<option>
<xsl:attribute name="value">
<xsl:value-of select="current()"/>
</xsl:attribute>
<xsl:apply-templates/>
</option>
</xsl:template>
<opzioni>
<ul>
<li class="layout" id="layout_1.css">layout_1.css
<ul>
<li>carpa_11.css</li>
<li>carpa_12.css</li>
</ul>
</li>
<li class="layout" id="layout_2.css">layout_2.css
<ul>
<li>carpa_21.css</li>
<li>carpa_22.css</li>
</ul>
</li>
</ul>
</opzioni>
Vorrei riuscire a trasformarlo in questo:
<select>
<optgroup label="layout1.css">
<option value ="carpa_11.css">carpa_11.css</option>
<option value ="carpa_12.css">carpa_11.css</option>
</optgroup>
<optgroup label="layout2.css">
<option value ="carpa_21.css">carpa_21.css</option>
<option value ="carpa_22.css">carpa_22.css</option>
</optgroup>
</select>
Ho provato un po' di tutto, il tentativo che piu ci va vicino č questo
(ma il problema č che optgroup non deve avere un nodo di testo al suo interno che ne definisca il nome, bensė un attributo "value" con tale valore.
Riesco a settare l'attributo in questione, ma non riesco a rimuovere il nodo di testo..):
<xsl:template match="opzioni">
<div class="marcatore-poliwiki" id="opzioni" >
<xsl:apply-templates select="./ul"/>
</div>
</xsl:template>
<xsl:template match="opzioni/ul">
<div id="opzioni" class="marcatore-poliwiki">
<select>
<xsl:apply-templates/>
</select>
</div>
</xsl:template>
<xsl:template match="opzioni/ul/li">
<optgroup>
<xsl:apply-templates/>
</optgroup>
</xsl:template>
<xsl:template match="opzioni/ul/li/ul">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="opzioni/ul/li/ul/li">
<option>
<xsl:attribute name="value">
<xsl:value-of select="current()"/>
</xsl:attribute>
<xsl:apply-templates/>
</option>
</xsl:template>