Thread View: pl.comp.xml
2 messages
2 total messages
Started by Adam
Fri, 25 Jan 2008 13:56
Poczatkujacy w XSLT
Author: Adam
Date: Fri, 25 Jan 2008 13:56
Date: Fri, 25 Jan 2008 13:56
84 lines
3714 bytes
3714 bytes
Witam.
To moje poczatki z XSLT i napotkalem na problem. Chetnie poznalbym rozwiazanie
mojego problemu a oto on. Mam taki zrodlowy plik XML definiujacy strukture menu:
<menu>
<item name="0">
<label>Item 0</label>
</item>
<item name="1">
<label>Item 1</label>
<item name="1">
<label>Subitem 1</label>
</item>
<item name="2">
<label>Subitem 2</label>
<item name="1">
<label>Subsubitem 1</label>
</item>
<item name="2">
<label>Subsubitem 2</label>
</item>
</item>
<item name="3">
<label>Subitem 3</label>
</item>
<item name="4">
<label>Subitem 4</label>
</item>
</item>
<item name="2">
<label>Item 2</label>
<item name="1">
<label>Subitem 1</label>
</item>
<item name="2">
<label>Subitem 2</label>
</item>
<item name="3">
<label>Subitem 3</label>
</item>
</item>
<item name="3">
<label>Item 3</label>
</item>
</menu>
Probuje utworzyc XSLT ktory z tego XML wygeneruje nastepujacy kod HTML (XSLT
otrzymuje na wejsciu parameter path okreslajacy sciezke do wybranego elementu).
Czyli jesli input path jest rowne 1.2.1 (okreslone przez parametry @name
kolejnych elementow <item>) to HTML bedzie nastepujacy
<div id="item">
<div>Item 0</div>
<div id="on_path">Item 1</div>
<div id="indentedlevel">
<div>Subitem 1</div>
<div id="on_path">Subitem 2</div>
</div>
<div id="secondindentedlevel">
<div id="selected">Subsubitem 1</div>
<div>Subsubitem 2</div>
</div>
<div id="indentedlevel">
<div>Subitem 3</div>
<div>Subitem 4</div>
</div>
<div>Item 2</div>
<div>Item 3</div>
</menu>
Napisalem XSL ktory tworzy podany HTML ale przy wchodzeniu w trzeci poziom
(secondindentedlevel) nie zamyka poziomu drugiego. Problem z tym jest taki, ze
przy wejsciu w trzeci poziom <div id="secondindentedlevel"> trzeba najpierw
zamknac poziom drugi (indentedlevel) tagiem </div>, a po wyjsciu z niego
ponownie go otworzyc. Bede wdzieczny za wszelkie sugestie.
Pozdrawiam
Adam
--
Wysลano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Poczatkujacy w XSLT
Author: NotBear
Date: Sat, 26 Jan 2008 10:05
Date: Sat, 26 Jan 2008 10:05
51 lines
2635 bytes
2635 bytes
Adam wrote:
> Probuje utworzyc XSLT ktory z tego XML wygeneruje nastepujacy kod
> HTML (XSLT otrzymuje na wejsciu parameter path okreslajacy sciezke do
> wybranego elementu). Czyli jesli input path jest rowne 1.2.1
> (okreslone przez parametry @name kolejnych elementow <item>) to HTML
> bedzie nastepujacy
>
> <div id="item"> <div>Item 0</div>
[OT] Dygresja 1. Tworzysz pozagniezdzane listy, wiec uzyj elementow listy
<ul>
<li>...
> <div id="on_path">Item 1</div> <div id="indentedlevel"> <div>Subitem
> 1</div> <div id="on_path">Subitem 2</div> </div>
[OT] Dygresja 2. Grubszy blad. Id sluzy do oznaczenia jednego,
konkretnego elementu. "Jest w sciezce" to pewna wlasciwosc jednego lub
wielu elementow. Innymi slowy - okresla przynaleznosc do _klasy_
elementow sciezki. Podobnie z "intendedlevel". Co wiecej - jesli zamiast
tworzyc plaska strukture, pozagniezdzasz poziomy w sobie, to glebokosc
bedzie wynikac z kontekstu i dodatkowe klasy numerujace poziomy nie beda
potrzebne. Np:
<ul>
<li class="in_path">
<ul>
<li class="in_path selected">...
> Problem z tym jest taki, ze przy wejsciu w trzeci poziom <div
> id="secondindentedlevel"> trzeba najpierw zamknac poziom drugi
> (indentedlevel) tagiem </div>, a po wyjsciu z niego ponownie go
> otworzyc.
Nie pokazales najwazniejszego, czyli kodu transformacji. Ale trudno,
podrzuce (zaznaczam, ze uproszczona) sugestie:
<xsl:template math="item">
<li> <!-- otwieramy -->
<xsl:value-of select="label"/>
<ul>
<xsl:apply-templates select="item"/> <!-- glebiej -->
</ul>
<li> <!-- zamykamy -->
<xsl:template>
--
NotBear
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads