Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> XSLT a zmienne
nightmark
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 5.08.2005

Ostrzeżenie: (0%)
-----


Witam.
Czy istnieje jakaz mozliwosc zastosowania klasycznych zmiennych w arkuszach XSLT.
Chodzi mi o mozliwosc zwiekszenia zmiennej przy przechodzeniu przez kolejny wezel.
Wiem ze w xslt nie istnieja zmienne w pelnym slowa tego znaczeniu ale moze da sie to zrobic w jakis inny sposob? Chodzi o to ze aby przy przejsciu przez np:

Kod:
<?xml version="1.0" encoding="iso-8859-2" ?>
- <document>
- <subject name="Jezyk angielski" internet_only="0" exam="1">
<lang_group name="1" level="B" />
<meeting date="2005-02-21" time="08:30 - 10:00" room="9K" teachers="mgr Aleksandra K" day="poniedzialek" />
<meeting date="2005-02-28" time="08:30 - 10:00" room="9K" teachers="mgr Aleksandra K" day="poniedzialek" />
<meeting date="2005-03-07" time="08:30 - 10:00" room="9K" teachers="mgr Aleksandra K" day="poniedzialek" />
<meeting date="2005-03-14" time="08:30 - 10:00" room="9K" teachers="mgr Aleksandra K" day="poniedzialek" />
<meeting date="2005-03-21" time="08:30 - 10:00" room="9K" teachers="mgr Aleksandra K" day="poniedzialek" />
<meeting date="2005-04-04" time="08:30 - 10:00" room="9K" teachers="mgr Aleksandra K" day="poniedzialek" />
...........
..........
.........itd

kawalek takiego kodu byl bym w stanie stworzyc petle i zwiekszyc jakas zmienna o 1, aby wiedzec czy w dokumencie przez mnie przetwarzanym "meeting date" jest mniejsze od daty dzisiejszej.

Date dzisiejsza pobieram z php wiec ja mam. Konwetruje date na liczbe, tworze petle, ktora po kolei sprawdza czy data ta juz minela i gdy minela, chce zwiekszac jakas wartosc o 1, zeby moc sprawdzic czy minely juz wszystkie daty we wszystkich przedmiotach i wyswietlic odpowiedni komunikat.
Moza sa jakies rozszerzenia ktore sa w stanie to zalatwic?
Zgory dzieki za pomoc.
Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
matid
post
Post #2





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

Ostrzeżenie: (0%)
-----


  1. <xsl:variable name="liczba" select="1" />
  2. <xsl:variable name="liczba" select="$liczba+1" />

A co do pętli to jest:
  1. <xsl:for-each select="węzeł"></xsl:for-each>


Ten post edytował matid 5.08.2005, 21:45:21
Go to the top of the page
+Quote Post
nightmark
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 5.08.2005

Ostrzeżenie: (0%)
-----


Tak tyle ze to wlasnie bedzie traktowane jako stala a nie zmienna krora moge zwiekszac.
Chodzi mi bardziej co cos w stylu na czym moge wykonac np i++ .
Zwiekszenie zmiennej o 1 badz jakas tam wartosc.
Go to the top of the page
+Quote Post
matid
post
Post #4





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

Ostrzeżenie: (0%)
-----


Cytat
The only way in which a variable can be changed is by declaring it inside a for-each loop, in which case its value will be updated for every iteration.


Ten post edytował matid 5.08.2005, 21:48:22
Go to the top of the page
+Quote Post
nightmark
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 5.08.2005

Ostrzeżenie: (0%)
-----


po zrobieniu tego jak mowisz wyskakuje:
conflicting variable bindings 'liczba'
Go to the top of the page
+Quote Post
matid
post
Post #6





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

Ostrzeżenie: (0%)
-----


Nie wiem do końca, jak zmieniasz te czasy na timestamp, ale udało mi się wymyślić tylko takie coś:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
  3. <document>
  4.    <lang>
  5.        <meeting time="1123271502" />
  6.        <meeting time="1123272502" />
  7.        <meeting time="1123273502" />
  8.    </lang>
  9.    <lang>
  10.        <meeting time="1123274502" />
  11.        <meeting time="1123275502" />
  12.        <meeting time="1123276502" />
  13.        <meeting time="1123277502" />
  14.    </lang>
  15. </document>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:template match="/">
  4.    <html>
  5.    <body>
  6.        <xsl:variable name="now">1123275502</xsl:variable>
  7.        <xsl:variable name="pozostalo" select="count(/document/lang[meeting/@time>$now])" />
  8.    <xsl:if test="$pozostalo = 0">
  9.        Mineły wszystkie daty we wszystkich przedmiotach!
  10.    </xsl:if>
  11.    </body>
  12.    </html>
  13. </xsl:template>
  14. </xsl:stylesheet>

Popracujesz trochę nad tym i powinno być ok.

A co to tych zmiennych, to przepraszam, tego rzeczywiście się tak nie da zrobić smile.gif

Ten post edytował matid 5.08.2005, 23:01:52
Go to the top of the page
+Quote Post
nightmark
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 5.08.2005

Ostrzeżenie: (0%)
-----


Konwertuje date na liczbe w ten sposob:

<xsl:variable name="d_data">
<xsl:value-of select="translate($dzisiejsza_data,'-','')"/> <!-- konwertuje date na liczbe -->
</xsl:variable>

Czy istnieje mozliwosc przekonwetowania tego w locie zgodnie ze schametem ktory proponujesz?

<xsl:variable name="pozostalo" select="count(/document/subject[meeting/@date > $d_data])" />
<xsl:if test="$pozostalo = 0">
<p> Minely wszystkie daty we wszystkich przedmiotach!</p>
</xsl:if>

poniewaz data pobiarana wczesniej z bazy danych jest w formacie z kreskami i tak wlasnie wystepuje w dokumencie xml ktory przerabiam za pomoca tego arkusza



wlasnie troche przerobilem i zdaje sie dzialac w ten sposob:

Kod
<xsl:variable name="d_data">
       
      <xsl:value-of select="translate($dzisiejsza_data,'-','')"/> <!-- konwertuje date na liczbe -->
</xsl:variable>



<xsl:variable name="pozostalo" select="count(/document/subject[translate(meeting/@date,'-','') > $d_data])" />
<xsl:if test="$pozostalo = 0">
<p> Minely wszystkie daty we wszystkich przedmiotach!</p>
</xsl:if>


Ten post edytował nightmark 6.08.2005, 17:24:51
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 02:28