Thread View: pl.comp.xml
8 messages
8 total messages
Started by maciek.tarkowski
Tue, 29 Jan 2008 13:02
Ciekawostka
Author: maciek.tarkowski
Date: Tue, 29 Jan 2008 13:02
Date: Tue, 29 Jan 2008 13:02
25 lines
1846 bytes
1846 bytes
Witam, Zgłębiam tajniki transformowania XMLa poprzez XSLT i napotkałem na swej drodzę następujące zagadnienie: czy jest możliwość interpretowania (i w jaki sposób to robić?) powtarzających się Itemów, tzn takich o jednakowej nazwie, ale różnych wartościach? Przykład zamieszczam poniżej: <?xml version="1.0" encoding="windows-1250" ?> - <Dokument> - <Naglowek> <Item name="dok_NrPelny" value="1/2008" /> <Item name="dok_Id" value="80" /> <Item name="dok_Typ" value="2" /> // .... inne podobne <Item name="blad" value="13" /> <Item name="blad" value="29" /> </Naglowek> </Dokument> Chodzi o wyciągnięcie i wypisanie zarówno '13' jak i '29'. Słyszałem, że to ciekawy temat, więc chętnie dowiem się na ten temat więcej. Będę wdzięczny za wszelką pomoc. Pozdrawiam
Re: Ciekawostka
Author: szomiz
Date: Tue, 29 Jan 2008 14:11
Date: Tue, 29 Jan 2008 14:11
20 lines
1616 bytes
1616 bytes
Użytkownik <maciek.tarkowski@gmail.com> napisał w wiadomości news:d78657fe-5484-4bc8-846d-c27413097e05@f47g2000hsd.googlegroups.com... <?xml version="1.0" encoding="windows-1250" ?> - <Dokument> - <Naglowek> <Item name="dok_NrPelny" value="1/2008" /> <Item name="dok_Id" value="80" /> <Item name="dok_Typ" value="2" /> // .... inne podobne <Item name="blad" value="13" /> <Item name="blad" value="29" /> </Naglowek> </Dokument> > Chodzi o wyciągnięcie i wypisanie zarówno '13' jak i '29'. A co robisz w tej chwili, ze sie nie wypisuje? sz.
Re: Ciekawostka
Author: maciek.tarkowski
Date: Tue, 29 Jan 2008 14:52
Date: Tue, 29 Jan 2008 14:52
35 lines
2437 bytes
2437 bytes
On 29 Sty, 15:11, "szomiz" <szo...@kocha.dostawac.reklamy.przez.net> wrote: > Użytkownik <maciek.tarkow...@gmail.com> napisał w wiadomościnews:d78657fe-5484-4bc8-846d-c27413097e05@f47g2000hsd.googlegroups.com... > > <?xml version="1.0" encoding="windows-1250" ?> > - <Dokument> > - <Naglowek> > <Item name="dok_NrPelny" value="1/2008" /> > <Item name="dok_Id" value="80" /> > <Item name="dok_Typ" value="2" /> > // .... inne podobne > <Item name="blad" value="13" /> > <Item name="blad" value="29" /> > </Naglowek> > </Dokument> > > > Chodzi o wyciągnięcie i wypisanie zarówno '13' jak i '29'. > > A co robisz w tej chwili, ze sie nie wypisuje? > > sz. Dane ze wszystkich pól wyciągam w podobny sposób: <xsl:call-template name="FormatString"> <xsl:with-param name="var" select="Naglowek/Item[@name='blad']/ @value"/> <xsl:with-param name="len" select="20"/> <xsl:with-param name="ident" select="'l'"/> </xsl:call-template> FormatString to średniego skomplikowania templatka wyrównująca tekst do prawej/lewej lub centrująca. Oczywiście w ten sposób dostaję tylko pierwszą z wartości: 13. Powtórzenie powyższego kodu 2 razy oczywiście nie przynosi rozwiązania.
Re: Ciekawostka
Author: szomiz
Date: Tue, 29 Jan 2008 17:07
Date: Tue, 29 Jan 2008 17:07
47 lines
2607 bytes
2607 bytes
Użytkownik <maciek.tarkowski@gmail.com> napisał w wiadomości
news:0c9550a2-9bf4-456b-9453-60940f77dfbc@e25g2000prg.googlegroups.com...
> A co robisz w tej chwili, ze sie nie wypisuje?
>
> sz.
> Dane ze wszystkich pól wyciągam w podobny sposób:
<xsl:call-template name="FormatString">
<xsl:with-param name="var" select="Naglowek/Item[@name='blad']/
@value"/>
<xsl:with-param name="len" select="20"/>
<xsl:with-param name="ident" select="'l'"/>
</xsl:call-template>
Niech zyje call-template... Dlaczego nie zawolasz:
...
<xsl:apply-templates select="Naglowek/Item[@name='blad']"/>
...
A pozniej:
<xsl:template match="Item[@name='blad']">
...
Ktory wykona sie _osobno_ dla _kazdego_ Item[@name='blad'] ?
Nawiasem mowiac obecnie masz wszystkie potrzebne Item w parametrze. Sprawdz:
<xsl:value-of select="count($var)"/>
Ale w sposob jaki wymysliles takich rzeczy sie nie robi!
Jedyne co cie moze usprawiedliwic to korzystanie z badziewnych przykladow
szwendajacych sie po sieci.
<teraz OT>
Czy jeszcze kogos dziwi, dlaczego z takim uporem zniechecam do
call-template i for-ach?
;>
</teraz OT>
> FormatString to średniego skomplikowania templatka wyrównująca tekst
> do prawej/lewej lub centrująca.
Znaczy do tekstu dane wypluwasz? Pokaz te funkcie, bo sie moze okazac sie
jest piec razy bardziej skomplikowana niz trzeba ;-)
sz.
Re: Ciekawostka
Author: maciek.tarkowski
Date: Tue, 29 Jan 2008 17:34
Date: Tue, 29 Jan 2008 17:34
61 lines
3473 bytes
3473 bytes
On 29 Sty, 18:07, "szomiz" <szo...@kocha.dostawac.reklamy.przez.net>
wrote:
> > FormatString to średniego skomplikowania templatka wyrównująca tekst
> > do prawej/lewej lub centrująca.
>
> Znaczy do tekstu dane wypluwasz? Pokaz te funkcie, bo sie moze okazac sie
> jest piec razy bardziej skomplikowana niz trzeba ;-)
>
> sz.
Hmm tak się składa, że nie ja jestem autorem tego całego badziewia:
<xsl:template name="FormatString">
<xsl:param name="var"/>
<xsl:param name="len"/>
<xsl:param name="ident"/>
<xsl:param name="over" select="0"/>
<xsl:variable name="len1" select="$len - string-length($var)"/>
<xsl:if test="$len1=0">
<xsl:value-of select="$var"/>
</xsl:if>
<xsl:if test="$len1<0">
<xsl:choose>
<xsl:when test="$over=1">
<xsl:value-of
select="substring('**************************************************************************************',
1, $len )"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($var, 1, $len )"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="$len1>0">
<!--align right-->
<xsl:if test="$ident='r'">
<xsl:call-template name="FormatString">
<xsl:with-param name="var" select="concat(' ', $var)"/>
<xsl:with-param name="len" select="$len"/>
<xsl:with-param name="ident" select="$ident"/>
</xsl:call-template>
</xsl:if>
<!--align left-->
<xsl:if test="$ident='l'">
<xsl:call-template name="FormatString">
<xsl:with-param name="var" select="concat($var, ' ')"/>
<xsl:with-param name="len" select="$len"/>
<xsl:with-param name="ident" select="$ident"/>
</xsl:call-template>
</xsl:if>
<!--align center-->
<xsl:if test="$ident='c'">
<xsl:call-template name="FormatString">
<xsl:with-param name="var" select="concat(' ', $var, ' ')"/>
<xsl:with-param name="len" select="$len"/>
<xsl:with-param name="ident" select="$ident"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
Re: Ciekawostka
Author: szomiz
Date: Tue, 29 Jan 2008 18:03
Date: Tue, 29 Jan 2008 18:03
41 lines
2739 bytes
2739 bytes
Użytkownik <maciek.tarkowski@gmail.com> napisał w wiadomości
news:31dc5b5a-1615-4f25-ad5d-e43ac93ed6cf@v67g2000hse.googlegroups.com...
> Hmm tak się składa, że nie ja jestem autorem tego całego badziewia:
Nie nazywaj niczego badziewiem, dopoki osobiscie nie popelnisz czegos
gorszego, zwlaszcza jezeli dostales za darmo...
Nie lubie nazwanych szablonow. W Twoim przypadku jego wywolanie powinno miec
postac:
<xsl:for-each select="Naglowek/Item[@blad]">
<xsl:call-template name="FormatString">
<xsl:with-param name="var" select="@value"/>
...
Brzydkie jak kupa nosorozca :/
Mozna co prawda uproscic do:
<xsl:for-each select="Naglowek/Item[@blad]/@value">
<xsl:call-template name="FormatString">
...
I _nie_ podajemy parametru var, poniewaz:
<xsl:template name="FormatString">
<xsl:param name="var" select="."/>
...
Wywolujesz szablon z kontekstem atrybutu. xsl:param dziala w ten sposob, ze
jezeli _nie_podasz_ go przy wywolaniu przyjmie wartosc jak w select.
Ale to tylko jedna linijka mniej. Aby sprawe zalatwic *koszernie* trzeba by
wiedziec skad sie biora (jak sa ustalane) parametry len i ident, oraz po co
sie meczyc z over, skoro ani go nie wysylasz, ani szablon w (chyba zbednej)
rekurencji go nie modyfikuje.
sz.
P.S A jak skonczysz watek to wyladujesz w KF'ie, bo czulem ze bedzie
ciekawie. Co prawda o innym kierunku, ale to nie zmienia postaci rzeczy.
Re: Ciekawostka
Author: maciek.tarkowski
Date: Thu, 31 Jan 2008 17:59
Date: Thu, 31 Jan 2008 17:59
46 lines
3144 bytes
3144 bytes
On 29 Sty, 19:03, "szomiz" <szo...@kocha.dostawac.reklamy.przez.net> wrote: > Użytkownik <maciek.tarkow...@gmail.com> napisał w wiadomościnews:31dc5b5a-1615-4f25-ad5d-e43ac93ed6cf@v67g2000hse.googlegroups.com... > > > Hmm tak się składa, że nie ja jestem autorem tego całego badziewia: > > Nie nazywaj niczego badziewiem, dopoki osobiscie nie popelnisz czegos > gorszego, zwlaszcza jezeli dostales za darmo... > > Nie lubie nazwanych szablonow. W Twoim przypadku jego wywolanie powinno miec > postac: > <xsl:for-each select="Naglowek/Item[@blad]"> > <xsl:call-template name="FormatString"> > <xsl:with-param name="var" select="@value"/> > ... > > Brzydkie jak kupa nosorozca :/ > > Mozna co prawda uproscic do: > > <xsl:for-each select="Naglowek/Item[@blad]/@value"> > <xsl:call-template name="FormatString"> > ... > > I _nie_ podajemy parametru var, poniewaz: > > <xsl:template name="FormatString"> > <xsl:param name="var" select="."/> > ... > > Wywolujesz szablon z kontekstem atrybutu. xsl:param dziala w ten sposob, ze > jezeli _nie_podasz_ go przy wywolaniu przyjmie wartosc jak w select. > > Ale to tylko jedna linijka mniej. Aby sprawe zalatwic *koszernie* trzeba by > wiedziec skad sie biora (jak sa ustalane) parametry len i ident, oraz po co > sie meczyc z over, skoro ani go nie wysylasz, ani szablon w (chyba zbednej) > rekurencji go nie modyfikuje. > > sz. > > P.S A jak skonczysz watek to wyladujesz w KF'ie, bo czulem ze bedzie > ciekawie. Co prawda o innym kierunku, ale to nie zmienia postaci rzeczy. Hmmm niestety ciągle brak efektu:( Chyba będę musiał zagadać do "producenta" tego rozwiązania. Chyba za mało jeszcze w tej materii umiem:(
Re: Ciekawostka
Author: szomiz
Date: Thu, 31 Jan 2008 18:44
Date: Thu, 31 Jan 2008 18:44
9 lines
1667 bytes
1667 bytes
Użytkownik <maciek.tarkowski@gmail.com> napisał w wiadomości news:f2d3ff88-b435-45f6-a316-fb7225b14bc2@u10g2000prn.googlegroups.com... > Hmmm niestety ciągle brak efektu:( Chyba będę musiał zagadać do A co zrobiles, bo moi zdaniem efekt powinien wystapic. Jezeli kodo jest duzo - podeslij na priv. sz.
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