Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Automatycznie generowany szablon xslt (na podstawie pliku xml) - czy to się da zrobić ?
szagi3891
post 14.08.2009, 07:53:47
Post #1





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


Moje pytanie jest takie.
Wyobraźmy sobie dane xml opisujące jak ma wyglądać strona. Następnie te dane poddaję transformacji za pomocą stałego szablonu xslt który mi generuje właściwy szablon tej konkretnej podstrony.

Wynikowy szablon (który został wygenerowany z danych xml) + dane konkretnej podstrony --> otrzymalibyśmy stronę na której nam zależy.

Teraz pytanie, jak stworzyć taki szablon xslt który na podstawie danych z pliku xml wygeneruje nowy szablon xslt ?


reasumując (chcę zrobić coś takiego) :

xml1 - dane opisujące budowę strony
xslt1 - szablon systemowy służący do generowania plików xslt konkretnych podstron
xslt2 - szablon konkretnej podstrony
xml2 - dane które mają zostać osadzone na konkretnej podstronie

xml1 + xslt1 ----> xslt2
xml2 + xslt2 ----> nasz długo oczekiwany dokument html sformatowany ze wszystkimi możliwymi standardami smile.gif

Czy ma ktoś pomysł jak napisać taki szablon xslt1 ?
Problem sprowadza się zasadniczo do tego że nie wiem jak osadzić znaczniki w przestrzeni nazw xsl:cos w nowym wynikowym dokumencie.


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
Go to the top of the page
+Quote Post
erix
post 14.08.2009, 11:04:13
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Teraz pytanie, jak stworzyć taki szablon xslt który na podstawie danych z pliku xml wygeneruje nowy szablon xslt ?

Yyyy, a po co tak?

Cytat
xslt1 - szablon systemowy służący do generowania plików xslt konkretnych podstron

Z tego, co pamiętam, to przecież można dołączać szablony do siebie.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
szagi3891
post 14.08.2009, 12:06:54
Post #3





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


Po to :

xml_dane (strony)
xml_wyglad (wygląd)

xml_wygląd + xslt_0 -> xslt_wyglad
xslt_wyglad + xml_dane -> gotowa strona

Można by to przyrównać do własnego systemu szablonów ściśle opartego na xslt i mocno z niego korzystających . Na podobnej zasadzie transformuje swoje szablony smarty na postać skompilowaną skryptów php które są potem łączone z danymi konkretnej podstrony. Zasada jest identyczna tylko że ja chcę mocno z xslt korzystać.

Idąc tym tokiem można by stworzyć coś na kształt kontrolek serwerowych z asp. Arkusz xslt_0 właśnie może odpowiadać za opis tego jak konkretna kontrolka ma zostać przetransformowana na kod szablonu xslt.


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
Go to the top of the page
+Quote Post
erix
post 14.08.2009, 12:32:49
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
xml_dane (strony)
xml_wyglad (wygląd)

xml_wygląd + xslt_0 -> xslt_wyglad
xslt_wyglad + xml_dane -> gotowa strona

Może zrób jakimś pseudokodem, bo trochę chaotycznie przedstawiłeś. Jak masz header/footer/sidebar, to przeciez możesz zainclude'ować inny, nie?

http://www.xml.com/pub/a/2000/11/01/xslt/index.html

IMHO cały problem rozwiązany.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
szagi3891
post 14.08.2009, 14:37:15
Post #5





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


O Boże. Chyba dam Ci zaraz jakiś "antypomógł" smile.gif Jeśli nie znasz odpowiedzi to proszę nie śmieć mi tematu.

Pytanie jest jednoznaczne : Automatycznie generowany szablon xslt (na podstawie pliku xml, pliku który opisuje jak on ma wyglądać) - czy to się da zrobić ?

Edit:

No dobrze, może jeszcze Cię tak z tym antypomógł tak nie będę karał. Chcesz kodu, ok.

Załóżmy ża mamy dane opisujące tabelę (w pliku xml z danymi) :
  1. <planety>
  2. <planeta>
  3. <nazwa>zmienia</nazwa>
  4. <od_slonca>3</od_slonca>
  5. </planeta>
  6.  
  7. <planeta>
  8. <nazwa>mars</mars>
  9. <od_slonca>2(chyba)</od_slonca>
  10. </planeta>
  11. </planety>


Tworzę plik xml który opisuje (określa) jak konkretne dane mają zostać wyświetlone na stronie.
  1. <table select="planety/planeta"> <!--select określa wiersze z danymi -->
  2. <column select="nazwa"> <!-- określa kolumnę z wiersza -->
  3. <name>nazwa planety</name>
  4. </column>
  5.  
  6. <column select="od_slonca">
  7. <name>kolejna od slonca</name>
  8. </column>
  9. </table>


No i teraz zostaje zadanie przetransformowania pliku xml zawierającego wygląd docelowej strony na odpowiedni szablon xslt który w połączeniu z danymi o planetach wyświetli odpowiednią tabelkę.

Napotkałem problem z napisaniem takiego szablonu ponieważ nie wiem jak w wynikowym dokumencie umieścić znaczniki typu : <xsl:cos> tak aby nie były przez obecną transformację interpretowane.
Czy to jest jaśniejszy opis ?

Ten post edytował szagi3891 14.08.2009, 15:02:02


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
Go to the top of the page
+Quote Post
erix
post 14.08.2009, 15:11:47
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
O Boże. Chyba dam Ci zaraz jakiś "antypomógł"

Bogu? tongue.gif

Cytat
Chyba dam Ci zaraz jakiś "antypomógł" Jeśli nie znasz odpowiedzi to proszę nie śmieć mi tematu.

Jakie pytanie, taka odpowiedź, wyrażaj się jasno, będą jasne odpowiedzi.

Cytat
Tworzę plik xml który opisuje (określa) jak konkretne dane mają zostać wyświetlone na stronie.

Ten plik musisz dołączyć do głównego XSLT. Potem, przy template-match po prostu wyciągasz atrybuty stosując łączenie stringów i pobranie wartości kolumn wybranych w dołączonym pliku. (operuj na zapytaniu w XPath)


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
szagi3891
post 14.08.2009, 15:27:29
Post #7





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


Dobrze Bogu, a teraz zróbmy eksperyment. Puść sznur biggrin.gif

Cytat(erix @ 14.08.2009, 16:11:47 ) *
Ten plik musisz dołączyć do głównego XSLT. Potem, przy template-match po prostu wyciągasz atrybuty stosując łączenie stringów i pobranie wartości kolumn wybranych w dołączonym pliku. (operuj na zapytaniu w XPath)


A tak serio to wyjaśnij proszę swoją odpowiedź. Jasna odpowiedź to i może będzie "pomógł" smile.gif


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
Go to the top of the page
+Quote Post
erix
post 14.08.2009, 15:31:06
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Jasna odpowiedź to i może będzie "pomógł"

I tak z tych punktów nic nie ma. ;d

Cytat
A tak serio to wyjaśnij proszę swoją odpowiedź.

No przecież masz w transformacjach XSL pętle:

  1. <xsl:for-each select="catalog/cd">
  2. <tr>
  3. <td><xsl:value-of select="title" /></td>
  4. <td><xsl:value-of select="artist" /></td>
  5. </tr>
  6. </xsl:for-each>


Przelatujesz <column /> i to, co wyciąga xsl:value-of pakujesz jako pobieranie wartości. Po prostu pętla w pętli. ;]


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
szagi3891
post 14.08.2009, 15:50:53
Post #9





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


Uffff, znalazłem.
Chodziło mi o taką konstrukcję :
  1. <xsl:text disable-output-escaping="yes">&lt;xsl:value-of match="."/&gt;</xsl:text>


Właśnie ten przykład który podajesz będzie wynikiem transformacji danych :

  1. <table select="planety/planeta">
  2. <column select="nazwa">
  3. <name>nazwa planety</name>
  4. </column>
  5.  
  6. <column select="od_slonca">
  7. <name>kolejna od slonca</name>
  8. </column>
  9. </table>


Za pomocą szablonu XSLT_0, który trzeba dopiero napisać.

Wynikiem tej transformacji będzie szablon :

  1. <xsl:for-each select="catalog/cd">
  2. <tr>
  3. <td><xsl:value-of select="title" /></td>
  4. <td><xsl:value-of select="artist" /></td>
  5. </tr>
  6. </xsl:for-each>


No. Taka jest właśnie moja idea :]

Ten post edytował szagi3891 14.08.2009, 15:51:30


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
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 Wersja Lo-Fi Aktualny czas: 21.06.2025 - 09:53