🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

11 total messages Started by tojest5 Sun, 27 Apr 2008 21:10
xslt - zmiana formatu danych
#9834
Author: tojest5
Date: Sun, 27 Apr 2008 21:10
45 lines
2220 bytes
Witam serdecznie,

Mam dane w xml i potrzebuję stworzyć plik tekstowy:
Wiem tylko tyle, że xslt to zrobi, przy pomocy wyrażeń xpath,
Proszę o pomoc.

xml:
<caly>
<cos><podcos>nie wazne</podcos></cos>
<zestaw>kol k2;dd;ss</zestaw>
<rzecz1><obszar1><k1>t</k1><k2>f</k2></obszar1><obszar2><k1>l</
k1><k2>d</k2></obszar2></rzecz1>
<rzecz1><obszar1><k2>t</k2></obszar1><obszar2><k1>2</k1></obszar2></
rzecz1>
<rzecz1><obszar1><k2>3t</k2></obszar1><obszar2><k1>2</k1><k2>ed</k2></
obszar2></rzecz1>
<rzecz2><obszar1><k2></k2></obszar1><obszar2><k1>2</1></obszar2></
rzecz2>
</rzecz3>
</rzecz4>
</rzecz3>
<rzecz1><obszar1><k1>t</k1><k2>d</k2><obszar2<k2>tre</k2></obszar2></
rzecz1>
<rzecz2><obszar1><k2></k2></obszar1><obszar2><k1>2</1></obszar2></
rzecz2>
</caly>

plik wynikowy to tekst o wartościach węzłów oddzielonych średnikami,
gdzie każdy kolejny
wiersz to łopatologicznie kolejna rzecz1:

szablon:
/caly/zestaw;/caly/rzecz1/obszar2/k1;/caly/rzecz1/obszar1/k1;/caly/
rzecz1/obszar1/k2

plik wynikowy:
kol k2;dd;ss;l;t;f
kol k2;dd;ss;2;;t
kol k2;dd;ss;2;;3t
kol k2;dd;ss;;t;d

jaki xslt do tego, proszę?

Pozdrawiam
Redi_S
Re: xslt - zmiana formatu danych
#9835
Author: szomiz
Date: Mon, 28 Apr 2008 07:45
22 lines
1636 bytes
Użytkownik <tojest5@gmail.com> napisał w wiadomości 
news:ac885687-be4d-46ec-8077-8efeeb51d700@2g2000hsn.googlegroups.com...
Witam serdecznie,

> Mam dane w xml i potrzebuję stworzyć plik tekstowy:
> Wiem tylko tyle, że xslt to zrobi, przy pomocy wyrażeń xpath,
> Proszę o pomoc.

Czy doszedles juz do czegos wiecej?

>xml:

To nie jest xml. W tym sa bledy.

> jaki xslt do tego, proszę?

No chociaz poczatek transformacji z jednym szablonem po ktorym widac, ze cos 
zrobiles...

Bo gotowy to 300 + VAT ;-)

sz. 
Re: xslt - zmiana formatu danych
#9836
Author: tojest5
Date: Mon, 28 Apr 2008 18:49
54 lines
2898 bytes
On 28 Kwi, 09:45, "szomiz" <szo...@kocha.dostawac.reklamy.przez.net>
wrote:
> Użytkownik <toje...@gmail.com> napisał w wiadomościnews:ac885687-be4d-46ec-8077-8efeeb51d700@2g2000hsn.googlegroups.com...

> Czy doszedles juz do czegos wiecej?
>
Właściwie to do niczego więcej nie doszedłem:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates select="/caly/rzecz1" />
</xsl:template>
<xsl:template match="/caly/rzecz1/obszar2" >
<xsl:value-of select="/caly/rzecz1/obszar2/k1" />;<xsl:value-of
select="/caly/rzecz1/obszar1/k1" />;<xsl:value-of select="/caly/rzecz1/
obszar1/k2" />
</xsl:template>
</xsl:stylesheet>

Zupełnie nie wiem jak się zabrać za wyswietlenie wartości <zestaw>


> >xml:
>
> To nie jest xml. W tym sa bledy.
>

<caly>
<cos><podcos>nie wazne co</podcos></cos>
<zestaw>kol k2;dd;ss</zestaw>
<rzecz1><obszar1><k1>t</k1><k2>f</k2></obszar1><obszar2><k1>l</
k1><k2>d</k2></obszar2></rzecz1>
<rzecz1><obszar1><k2>t</k2></obszar1><obszar2><k1>2</k1></obszar2></
rzecz1>
<rzecz1><obszar1><k2>3t</k2></obszar1><obszar2><k1>2</k1><k2>ed</k2></
obszar2></rzecz1>
<rzecz2><obszar1><k2></k2></obszar1><obszar2><k1>2</k1></obszar2></
rzecz2>
<rzecz3 />
<rzecz4 />
<rzecz3 />
<rzecz1><obszar1><k1>t</k1><k2>d</k2></obszar1><obszar2><k2>tre</k2></
obszar2></rzecz1>
<rzecz2><obszar1><k2></k2></obszar1><obszar2><k1>2</k1></obszar2></
rzecz2>
</caly>

dzięki za zainteresowanie

Redi_s
Re: xslt - zmiana formatu danych
#9837
Author: szomiz
Date: Mon, 28 Apr 2008 19:47
32 lines
2131 bytes
Użytkownik <tojest5@gmail.com> napisał w wiadomości 
news:f507be36-a704-42db-8523-d43092cdc01b@s50g2000hsb.googlegroups.com...


> Zupełnie nie wiem jak się zabrać za wyswietlenie wartości <zestaw>

    <xsl:apply-templates select="/caly/zestaw"/>

> >xml:
>
> To nie jest xml. W tym sa bledy.

W tym, po zlamaniu linii rowniez - wrzucaj przyklady na jakis serwer i 
podawaj linki.

Troche szkoda, ze jestes na slusznym tropie rozwiazania problemu ;)

Bo na tym przykladzie dalo by sie fajnie pokazac zastosowania osi w 
/omijaniu/ dzialania szablonow wbudowanych.

Bo mam niejakie wrazenie, ze /zadzialanie/ konstrukcji:

    ...
> <xsl:apply-templates select="/caly/rzecz1" />
    ...

<xsl:template match="/caly/rzecz1/obszar2" >
    ...

Nie jest do konca oczywiste dla wiekszosci /stosowaczy/ transformacji.

sz. 
Re: xslt - zmiana formatu danych
#9838
Author: szomiz
Date: Tue, 29 Apr 2008 08:14
4 lines
1293 bytes
Oj oj, calkiem nie tak. Imbirowka poprawia samopoczucie, ale stepia czujnosc 
;-)

sz. 
Re: xslt - zmiana formatu danych
#9839
Author: szomiz
Date: Tue, 29 Apr 2008 08:33
54 lines
2926 bytes
Użytkownik "szomiz" <szomiz@kocha.dostawac.reklamy.przez.net> napisał w 
wiadomości news:fv5a0c$sm4$1@nemesis.news.neostrada.pl...

>    <xsl:apply-templates select="/caly/zestaw"/>

<xsl:value-of select="/caly/zestaw"/>

I w tym miejscu dokladnie tak, sciezka bezwzgledna, bo chodzi o ten jeden 
konkretny wezel w dokumencie.

> <xsl:template match="/caly/rzecz1/obszar2" >

Jakie jest uzasadnienie dla wpisywania powyzej calej sciezki? Samo 
match="obszar2" zadziala tak samo.

> <xsl:value-of select="/caly/rzecz1/obszar2/k1" />

A tutaj zdecydowanie nie tak.ten zapis spowoduje, ze dla kazdego obszar 2 
dostaniesz zestaw danych _pierwszego_ wystapienia obszar 2.

<xsl:value-of select="k1" />

zwroci wartosc lokalna.

Imbirowka poprawia samopoczucie, ale stepia czujnosc ;-)


Popatrz na sprawe nieco inaczej. Chcesz, aby wiersz wyniku generowal sie dla 
konkretnych elementow wystepujacych w dokumencie.  Ktore to elementy?

Zalozmy, ze rzecz1 (chociaz na oko wydaje, ze obszar1, obszar2...).

Blokujesz wykonanie wbudowanych szablonow, ktore "nie prowadza" do 
interesujacych cie elementow:

<xsl:template match="*[not(.//rzecz1)]"/>

Ladniej bylo by napisac: *[not(descendant::rzecz1)], ale to szczegol.

<xsl:template match="rzecz1">
    <xsl:value-of .../>
    ...
    <xsl:text>&#13;&#10;</xsl:text>
</xsl:template-match>

I te dwa szablony w transformacji powinny wystarczyc.

To dla przypadku, w ktorym _wiesz_ jakie pola maja sie znalezc w odpowiedzi. 
Transformacja, ktora sama okresli liczbe pol w wierszu, to /troche/ inny 
problem.

sz.

P.S. Na prawde nik nie zauwazyl, ze wczoraj napisalem w watku glupoty? 
Re: xslt - zmiana formatu danych
#9840
Author: tojest5
Date: Tue, 29 Apr 2008 10:37
66 lines
3595 bytes
On 29 Kwi, 10:33, "szomiz" <szo...@kocha.dostawac.reklamy.przez.net>
wrote:
> Użytkownik "szomiz" <szo...@kocha.dostawac.reklamy.przez.net> napisał w
> wiadomościnews:fv5a0c$sm4$1@nemesis.news.neostrada.pl...
>

> Popatrz na sprawe nieco inaczej. Chcesz, aby wiersz wyniku generowal sie dla
> konkretnych elementow wystepujacych w dokumencie.  Ktore to elementy?

podaje ścieżki do tych elementów (jeden wiersz) (średnik to wartość
<xsl:text> i odgranicza kolejne pola w wierszu).

caly/zestaw ; /caly/rzecz1/obszar2/k1 ; /caly/rzecz1/obszar1/k1 ;
/caly/rzecz1/obszar1/k2

czyli w wyniku elementy te nie są ułożone w takiej kolejności jak ma
to miejsce w xml.

wartość <zestaw> powtarza się na początku każedego wiersza, czyli jest
pierwszym polem,
natomiast ilość wierszy jest uzależniona wystąpieniem <rzecz1>

dlatego pierwszą regułę dałem:

<xsl:apply-templates select = "rzecz1"> jako ograniczenie do
przetwarzania konkretnych elementów.

następna reguła to
<xsl:template match="rzecz1">
<xsl:value-of select="/caly/zestaw/text()"> czyli dla napotaknego
rzecz1 wstaw text() z <zestaw>

i tu powinny być wartości konkretnych elementów wykazanych ww.
Nie wiem jak blokować regułę wbudowaną w przypadku gdy kolejne
elementy mają być wyświetlone w różnej kolejności.
 - skoro reguła wbudowana przetwarza je właśnie po kolei.

> Zalozmy, ze rzecz1 (chociaz na oko wydaje, ze obszar1, obszar2...).
>
> Blokujesz wykonanie wbudowanych szablonow, ktore "nie prowadza" do
> interesujacych cie elementow:
>
> <xsl:template match="*[not(.//rzecz1)]"/>

ok, wykorzystam


> <xsl:template match="rzecz1">
>     <xsl:value-of .../>
>     ...
>     <xsl:text>&#13;&#10;</xsl:text>
> </xsl:template-match>
>
> I te dwa szablony w transformacji powinny wystarczyc.

> To dla przypadku, w ktorym _wiesz_ jakie pola maja sie znalezc w odpowiedzi.
> Transformacja, ktora sama okresli liczbe pol w wierszu, to /troche/ inny
> problem.

Tego się obawaiłem - transformacja musi określić tutaj liczbę pól -
zawsze musi ich być 4, bez względu czy dany element jest, czy też go
nie ma

dzięki!

Redi_S
Re: xslt - zmiana formatu danych
#9841
Author: szomiz
Date: Tue, 29 Apr 2008 10:56
43 lines
2816 bytes
Użytkownik <tojest5@gmail.com> napisał w wiadomości 
news:5bc27a1c-f3c1-4278-ba9d-b94b7d671503@59g2000hsb.googlegroups.com...


> caly/zestaw ; /caly/rzecz1/obszar2/k1 ; /caly/rzecz1/obszar1/k1 ;
> /caly/rzecz1/obszar1/k2

Operujac bezwzglednymi sciezkami wprowadzasz zamieszanie :(

_Bedac_ w elemencie rzecz1 potrzebujesz:
    /caly/zestaw - tutaj sciezka bezwzgledna jest ok
    obszar2/k1 - a odtad juz wzgledne
    obszar2/k1
    ...

> <xsl:value-of select="/caly/zestaw/text()">

To text() na koncu zasadniczo nie jest potrzebne.

> i tu powinny być wartości konkretnych elementów wykazanych ww.

Skorzystaj ze sciezek wzglednych...

> Nie wiem jak blokować regułę wbudowaną w przypadku gdy kolejne
> elementy mają być wyświetlone w różnej kolejności.
 > - skoro reguła wbudowana przetwarza je właśnie po kolei.

Tylko wtedy, gdy zrobisz apply-templates. Jezeli wrzucisz te wartosci przez 
value-of w odpowiedniej kolejnosci - nic wiecej sie nie wykona.

>> To dla przypadku, w ktorym _wiesz_ jakie pola maja sie znalezc w 
>> odpowiedzi.
>> Transformacja, ktora sama okresli liczbe pol w wierszu, to /troche/ inny
>> problem.

> Tego się obawaiłem - transformacja musi określić tutaj liczbę pól -
> zawsze musi ich być 4, bez względu czy dany element jest, czy też go
>nie ma

Jezeli zawsze ma ich byc 4 to nie musi. Ty to wiesz, wpisujesz wszystkie jak 
ktorejs nie bedzie, to value-of nic nie zwroci. Zaden klopot.

sz. 
Re: xslt - zmiana formatu danych
#9842
Author: tojest5
Date: Tue, 29 Apr 2008 13:26
24 lines
2409 bytes
On 29 Kwi, 12:56, "szomiz" <szo...@kocha.dostawac.reklamy.przez.net>
wrote:

> > caly/zestaw ; /caly/rzecz1/obszar2/k1 ; /caly/rzecz1/obszar1/k1 ;
> > /caly/rzecz1/obszar1/k2
>
> Operujac bezwzglednymi sciezkami wprowadzasz zamieszanie :(
>
> _Bedac_ w elemencie rzecz1 potrzebujesz:
>     /caly/zestaw - tutaj sciezka bezwzgledna jest ok
>     obszar2/k1 - a odtad juz wzgledne
>     obszar2/k1
>     ...
> Skorzystaj ze sciezek wzglednych...

ok, już chyba zakumałem o co chodzi z adresowanie względnym i
bezwzględnym - to, że bezwzględnie przy value-of select pobiera
wartości zawsze z pierwszego napotkanego elementu pasującego do
ścieżki - bez względu ile takich elementów jest. Względnie pobiera z
aktualnie przetwarzanego elementu.
Niestety nie mam jak narazie tego sprawdzić. hough

Dzięki i pozdrawiam
Redi_S
Re: xslt - zmiana formatu danych
#9843
Author: szomiz
Date: Tue, 29 Apr 2008 13:33
12 lines
1816 bytes
Użytkownik <tojest5@gmail.com> napisał w wiadomości 
news:804667d5-9bd0-4ba4-b687-0589bf5bf233@d45g2000hsc.googlegroups.com...

> Niestety nie mam jak narazie tego sprawdzić. hough

Masz ;-)

X-HTTP-UserAgent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; 
.NET
 CLR 2.0.50727),gzip(gfe),gzip(gfe)

hough 
Re: xslt - zmiana formatu danych
#9844
Author: szomiz
Date: Fri, 06 Jun 2008 20:55
21 lines
2224 bytes
Użytkownik <tojest5@gmail.com> napisał w wiadomości 
news:804667d5-9bd0-4ba4-b687-0589bf5bf233@d45g2000hsc.googlegroups.com...

> ok, już chyba zakumałem o co chodzi z adresowanie względnym i
> bezwzględnym - to, że bezwzględnie przy value-of select pobiera
> wartości zawsze z pierwszego napotkanego elementu pasującego do

Kurde - nie tak.

value-of _zawsze_ pobiera piewrsza pasujaca do sciezki wartosc.

> ścieżki - bez względu ile takich elementów jest. Względnie pobiera z
>aktualnie przetwarzanego elementu.

Nie. Pobiera _bezwzglednie_ pierwsza pasujaca.

Ale w takich zastosowaniach/uzyciach, pierwsza pasujaca wartosc wynikajaca 
ze sciezki wzglednej bedzie mniej glupia (a czesto wlasciwa) niz wynikajaca 
z prostej bezwzglednej.

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