🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

11 total messages Started by pbk++ Thu, 03 Apr 2008 06:01
Jak sprawdzić czy liczba
#9781
Author: pbk++
Date: Thu, 03 Apr 2008 06:01
26 lines
1640 bytes
Witam

Szukam, szukam i nie mogę trafić. Jak sprawdzić czy zawartość elementu 
jest liczbą?


Np. mam kod pocztowy, w Polsce ma format 99-999. Chcę sprawdzić czy na 
pozycjach 1-2, 4-6 są liczby.

Robię to w ten sposób:
number(concat(substring(@KodPocztowy, 1,2), substring(@KodPocztowy, 4,3))).

Daje mi to w rezultacie liczbę. Ale jak sprawdzić czy wynik 
przekształcenia jest liczbą. Chcę użyć tego w <xsl:if>.

Własnym sumptem wymyśliłem takiego potworka:
<xsl:if test="not(number(concat(substring(@KodPocztowy, 1,2), 
substring(@KodPocztowy, 4,3))) >= '0' and 
number(concat(substring(@KodPocztowy, 1,2), substring(@KodPocztowy, 4,3) 
)) &lt; '99999') ">

Zdaje się, że działa. Ale jak zapisać warunek inaczej, krócej, bardziej 
elegancko.

--
Piotrek
Re: Jak sprawdzić czy liczba
#9782
Author: szomiz
Date: Thu, 03 Apr 2008 06:44
11 lines
1420 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
news:ft1ru8$6rg$1@atlantis.news.neostrada.pl...

> Szukam, szukam i nie mogę trafić. Jak sprawdzić czy zawartość elementu 
> jest liczbą?

Jezeli:
translate($zmienna,'0123456789','')=''
to $zmienna jest albo liczba calkowita, albo jest puste.

sz. 
Re: Jak sprawdzić czy liczba
#9783
Author: szomiz
Date: Thu, 03 Apr 2008 06:52
11 lines
1421 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości
news:ft1ru8$6rg$1@atlantis.news.neostrada.pl...

> Szukam, szukam i nie mogę trafić. Jak sprawdzić czy zawartość elementu 
> jest liczbą?

Jezeli:
translate($zmienna,'0123456789','')=''
to $zmienna sklada sie wylacznie z cyfr albo jest pusta.

sz. 
Re: Jak sprawdzić czy liczba
#9784
Author: pbk++
Date: Fri, 04 Apr 2008 11:16
19 lines
1509 bytes
szomiz pisze:
> Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości
> news:ft1ru8$6rg$1@atlantis.news.neostrada.pl...
> 
>> Szukam, szukam i nie mogę trafić. Jak sprawdzić czy zawartość elementu 
>> jest liczbą?
> 
> Jezeli:
> translate($zmienna,'0123456789','')=''
> to $zmienna sklada sie wylacznie z cyfr albo jest pusta.


Dziękuję.

Inny problem. Chcę w transformowanym dokumencie w atrybucie zapisać 
xpath do przetwarzanego dokumentu. Jak wyłuskać xpath?

--
Piotrek
Re: Jak sprawdzić czy liczba
#9785
Author: szomiz
Date: Fri, 04 Apr 2008 11:54
14 lines
1613 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
news:ft533q$l3e$1@nemesis.news.neostrada.pl...

> Inny problem. Chcę w transformowanym dokumencie w atrybucie zapisać xpath 
> do przetwarzanego dokumentu. Jak wyłuskać xpath?

xPath dokumentu? A nie elementu?

Jak ma byc wyrazana sciezka? Ma identyfikowac rodzaj/zagniezdzenie elementu, 
czy jego precyzyjna pozycje w dokumencie?

Generalnie: os ancestor-or-self.

sz. 
Re: Jak sprawdzić czy liczba
#9786
Author: pbk++
Date: Fri, 04 Apr 2008 12:10
23 lines
1677 bytes
szomiz pisze:
> Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
> news:ft533q$l3e$1@nemesis.news.neostrada.pl...
> 
>> Inny problem. Chcę w transformowanym dokumencie w atrybucie zapisać xpath 
>> do przetwarzanego dokumentu. Jak wyłuskać xpath?
> 
> xPath dokumentu? A nie elementu?

Elementu, przejęzyczenie.

> 
> Jak ma byc wyrazana sciezka? Ma identyfikowac rodzaj/zagniezdzenie elementu, 
> czy jego precyzyjna pozycje w dokumencie?

Precyzyjną pozycję. Tak, żeby można było do niej ponownie wrócić.
> 
> Generalnie: os ancestor-or-self.

os to oś ?

--
Piotrek
Re: Jak sprawdzić czy liczba
#9787
Author: szomiz
Date: Fri, 04 Apr 2008 12:15
11 lines
1489 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
news:ft55u4$olb$1@atlantis.news.neostrada.pl...

>> Generalnie: os ancestor-or-self.

> os to oś ?

A jest w xml'owych tematach jakies ancestor-or-self bedace czym innym?

--
Piotrek
Re: Jak sprawdzić czy liczba
#9788
Author: pbk++
Date: Fri, 04 Apr 2008 12:26
28 lines
2152 bytes
szomiz pisze:
> Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
> news:ft55u4$olb$1@atlantis.news.neostrada.pl...
> 
>>> Generalnie: os ancestor-or-self.
> 
>> os to oś ?
> 
> A jest w xml'owych tematach jakies ancestor-or-self bedace czym innym?

No, nie.

Rozumiem, ze oś wybiera mi odpowiednie elementy: bieżący i przodkowie. 
Ale jak je wszystkie zapisać jako atrybut, czyli uzyskać de facto xpath.
Chciałbym to załatwić w przekształceniu xsl, nie zaś chodząc za pomocą 
DOM'a po drzewie.
Przepraszam za może nie do końca przemyślane pytania, ale przetwarzanie 
xml za pomocą xslt jest dla mnie nowością i choć uczę się, to nadal mam 
mętlik w głowie.

Nawiązując do poprzedniego wątku o regułach, to robię to zapomocą xlst. 
Idzie dobrze, cieszę się tylko, że ja mam przygotować framework oraz 
sprawdzić co ciekawsze reguły. Bo, gdybym miał je wszystkie dłubać to 
pewnie przyrósłbym rzycią do krzesła ;-)


--
Piotrek
Re: Jak sprawdzić czy liczba
#9789
Author: szomiz
Date: Fri, 04 Apr 2008 12:52
35 lines
2446 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
news:ft56s0$s6g$1@atlantis.news.neostrada.pl...
szomiz pisze:
> Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
> news:ft55u4$olb$1@atlantis.news.neostrada.pl...
>
>>> Generalnie: os ancestor-or-self.
>
>> os to oś ?
>
> A jest w xml'owych tematach jakies ancestor-or-self bedace czym innym?

No, nie.

> Rozumiem, ze oś wybiera mi odpowiednie elementy: bieżący i przodkowie. Ale 
> jak je wszystkie zapisać jako atrybut, czyli uzyskać de facto xpath.
> Chciałbym to załatwić w przekształceniu xsl, nie zaś chodząc za pomocą 
> DOM'a po drzewie.

<xsl:apply-templates select="ancestor-of-self::*" mode="pthElem"/>

<xsl:template match="*" mode="pthElem">
    <xsl:value-of select="concat('/*[',count(preceding-sibling::*)+1,']')"/>
</xsl:template>

A jak to wsadzic w atrybut, to se juz poszukaj.

> Nawiązując do poprzedniego wątku o regułach, to robię to zapomocą xlst. 
> Idzie dobrze, cieszę się tylko, że ja mam przygotować framework oraz

Ja bym poczekal z tydzien/dwa...

:-P

sz. 
Re: Jak sprawdzić czy liczba
#9790
Author: pbk++
Date: Mon, 07 Apr 2008 09:10
41 lines
2424 bytes
szomiz pisze:
> Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 

> <xsl:apply-templates select="ancestor-of-self::*" mode="pthElem"/>
> 
> <xsl:template match="*" mode="pthElem">
>     <xsl:value-of select="concat('/*[',count(preceding-sibling::*)+1,']')"/>
> </xsl:template>

Dziękuję, działa.

Ale czy dałoby się się uzyskać coś takiego:
/SAD[1]/Zgloszenie[1]/Towar[9]

Modyfikacja
concat('/',name(),'[',count(preceding-sibling::*[name(self) = 
name(sibling)])+1,']')

Daje powyższy efekt, ale niestety numery w nawiasach kwadratowych 
odnoszą się do wszystkich elementów, nie zaś do elementów typu Towar.
Co powinienem napisać zamiast *[name(self) = name(sibling)], aby uzyskać 
numerację odnoszącą się tylko do elementów ścieżki czyli kolejno SAD, 
Zgloszenie i Towar.

Da się to zrobić, czy może trzeba przeiterować się po DOMie?


> A jak to wsadzic w atrybut, to se juz poszukaj.

Dałem radę.


> Ja bym poczekal z tydzien/dwa...

Poczekał, bo wtedy dopiero dotrę do reguł które mnie rozłożą na łopatki?
Czy też poczekał, bo nie warto tego już robić, gdyż świat się zmienia ? 
  :-P


--
Piotrek
Re: Jak sprawdzić czy liczba
#9791
Author: szomiz
Date: Mon, 07 Apr 2008 09:43
17 lines
1890 bytes
Użytkownik "pbk++" <jbond007@free.polbox.pl> napisał w wiadomości 
news:ftcogj$t1$1@atlantis.news.neostrada.pl...

> Modyfikacja
> concat('/',name(),'[',count(preceding-sibling::*[name(self) = 
> name(sibling)])+1,']')

A co to jest self i sibling? Zajrzyj moze wreszcie do specyfikacji. Jest 
krotsza od HTML'owych!

> Co powinienem napisać zamiast *[name(self) = name(sibling)], aby uzyskać

preceding-sibling::*[name()=name(current())]

I chyba juz kiedys o tym bylo...

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