🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

8 total messages Started by maciek.tarkowski Tue, 29 Jan 2008 13:02
Ciekawostka
#9689
Author: maciek.tarkowski
Date: Tue, 29 Jan 2008 13:02
25 lines
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
#9690
Author: szomiz
Date: Tue, 29 Jan 2008 14:11
20 lines
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
#9691
Author: maciek.tarkowski
Date: Tue, 29 Jan 2008 14:52
35 lines
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
#9692
Author: szomiz
Date: Tue, 29 Jan 2008 17:07
47 lines
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
#9693
Author: maciek.tarkowski
Date: Tue, 29 Jan 2008 17:34
61 lines
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&lt;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&gt;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
#9694
Author: szomiz
Date: Tue, 29 Jan 2008 18:03
41 lines
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
#9695
Author: maciek.tarkowski
Date: Thu, 31 Jan 2008 17:59
46 lines
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
#9696
Author: szomiz
Date: Thu, 31 Jan 2008 18:44
9 lines
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