Autor Zpráva
Mah-Pee-Yah-Too
Profil *
Ahoj!

Na základě včerejšího doporučení Jokera (viz tady) se od rána (tj. od šesté) snažím rozchodit vytvoření rozbalovacího menu se strukturou


<select name="jmeno">
<option value="kod">popis</option>
<option value="kod">popis</option>
...
...
</select>


podle XML se strukturou


<ciselnik>
<jmeno>kategorie</jmeno>
<seznam_kategorii>
<popis>Nové</popis><kod>N</kod>
<popis>Ojeté</popis><kod>O</kod>
<popis>Veterán</popis><kod>V</kod>
</seznam_kategorii>
</ciselnik>
<ciselnik>
<jmeno>skupina</jmeno>
<seznam_skupin>
<popis>Osobní</popis><kod>A</kod><kategorie>NOV</kategorie>
<popis>Terénní</popis><kod>B</kod><kategorie>NOV</kategorie>
<popis>Užitkové</popis><kod>C</kod><kategorie>NOV</kategorie>
<popis>Nákladní</popis><kod>D</kod><kategorie>NOV</kategorie>
<popis>Autobusy</popis><kod>E</kod><kategorie>NOV</kategorie>
<popis>Obytné automobily</popis><kod>F</kod><kategorie>NOV</kategorie>
<popis>Přívěsy</popis><kod>G</kod><kategorie>NOV</kategorie>
<popis>Motorky</popis><kod>J</kod><kategorie>NOV</kategorie>
<popis>Ostatní</popis><kod>L</kod><kategorie>NOV</kategorie>
</seznam_skupin>
</ciselnik>
...
...


Jak vidíte, ten číselník má pokaždé jinou strukturu.

Zkoušel jsem již řešení podle Intervalu, jakýms takýms způsobem to funguje. Tak jsem chtěl využít XSLT, ale nejenže mě u toho zlobí kódování, ale ani nedosáhnu kýženého výsledku. Všechny tutoriály, co jsem našel, totiž popisují načítání hodnoty prostřednictvím atributu v XML uzlu. Jak to ale udělat, když mám hodnotu pro svou "value" v "option" schovanou v dalším atributu?

Zkoušel jsem něco takového:


<?xml version="1.0" encoding="windows-1250"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates/>
<br />
</xsl:template>

<xsl:template match="ciselnik">
<xsl:apply-templates/><br />
</xsl:template>

<xsl:template match="jmeno">
<strong><xsl:apply-templates/></strong><br />
</xsl:template>

<xsl:template match="seznam_kategorii">
<select><xsl:apply-templates/></select>
</xsl:template>

<xsl:template match="seznam_skupin">
<select><xsl:apply-templates/></select>
</xsl:template>

<xsl:template match="skupina">
<select><xsl:apply-templates/></select>
</xsl:template>

<xsl:template match="popis">
<option><xsl:apply-templates/></option>
</xsl:template>

</xsl:stylesheet>


Nemá to požadovaný efekt. Prosím, pomozte!

Mah-Pee-Yah-Too
Mike8748
Profil
ty ale nikde nevkladas hodnoty tech elementu, akorat dokola aplikujes template, nic vic

doporucuju si jeste jednou precist neco o XSLT, hlavne cast o <xsl:value-of > (to jenom pro zacatek)
los
Profil *
Ja by som vytvoril iba jeden template, ktorým by zachytil číselník, a celé spracovanie číselníka by bolo v ňom. Nejako takto:
	<xsl:template match="ciselnik">

<strong><xsl:value-of select="jmeno"/></strong><br/>
<xsl:element name="select">
<xsl:attribute name="name"><xsl:value-of select="jmeno"/></xsl:attribute>
<xsl:for-each select="*[2]/popis">
<xsl:variable name="position" select="position()" />
<xsl:element name="option">
<xsl:attribute name="value"><xsl:value-of select="../kod[$position]"/></xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:element><br/>
</xsl:template>
Mah-Pee-Yah-Too
Profil *
To los:

To je úplná parada! Děkuji!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: