Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [xml] Sortowanie pliku XML
atomek4
post 8.03.2007, 17:31:39
Post #1





Grupa: Zarejestrowani
Postów: 179
Pomógł: 1
Dołączył: 8.03.2007
Skąd: Łódź

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


Witajcie,

Napisałem sobie skrypt w PHP 5 z wykorzystaniem SimpleXML, który pobiera dane z pliku XML o takim mniej więcej układzie:
  1. <slownik>
  2. <definicja>
  3. <tytul></tytuł>
  4. <opis></opis>
  5. </definicja>
  6. </slownik>



Czy jest możliwe wykonanie sortowania pliku XML, w tym przypadku np. po tytule?
Czy muszę po prostu wszystkie dane sam posegregować, przy wprowadzaniu?

Ten post edytował atomek4 8.03.2007, 17:32:44
Go to the top of the page
+Quote Post
SHARKI
post 29.04.2007, 22:43:03
Post #2





Grupa: Zarejestrowani
Postów: 42
Pomógł: 1
Dołączył: 29.04.2007

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


nie znam php :/ =[

ale wiem ze to wyswietlania danych sluzy np xsl w którym mozna sortowac dane.

xls czyta dane z xml'a i je wyswietla tak jak ktos sobie rzyczy
Go to the top of the page
+Quote Post
atomek4
post 30.04.2007, 13:07:06
Post #3





Grupa: Zarejestrowani
Postów: 179
Pomógł: 1
Dołączył: 8.03.2007
Skąd: Łódź

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


cześć, tak sortować bardzo wygodnie moge dzieki xsl, ale to wszystko jest po stronie klienta. Zalezalo mi na tym, aby zrobic to po stronie serwera. Funkcje php do xsl i xslt przejrzałem niestety troche tam utknalem a w ostateczności rezultaty mowiac szczerze nie byly zadowalajace. Poza tym pozostawala jeszcze kwestia wyszukiwania tego , co sobie użytkownik zażyczy.
W każdym badź razie przy recznym tworzeniu pliku zadbałem, żeby definicje byly posortowane alfabetyczne. Trzeba bylo sobie jakos poradzic smile.gif
Pozdrawiam
Go to the top of the page
+Quote Post
yaotzin
post 2.05.2007, 23:49:15
Post #4





Grupa: Zarejestrowani
Postów: 157
Pomógł: 0
Dołączył: 12.02.2007
Skąd: Zielona Góra

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


Plik XML jakiś tam:

  1.  
  2.  
  3. <?xml version="1.0" encoding="iso-8859-2" ?>
  4. <?xml-stylesheet type="text/xsl" href="nazw.xsl"?>  
  5. <!DOCTYPE pilkarze [
  6. <!ELEMENT pilkarze (pilkarz*)>
  7. <!ELEMENT pilkarz (imie,nazwisko,data_urodzenia,klub,pozycja,bramek)>
  8. <!ELEMENT imie (#PCDATA)>
  9. <!ELEMENT nazwisko (#PCDATA)>
  10. <!ELEMENT data_urodzenia (#PCDATA)>
  11. <!ELEMENT klub (#PCDATA)>
  12. <!ELEMENT pozycja (#PCDATA)>
  13. <!ELEMENT bramek (#PCDATA)>]>
  14.  
  15. <pilkarze>
  16.      <pilkarz>
  17.            <imie>Roberto</imie>
  18.            <nazwisko>Baggio</nazwisko>
  19.            <data_urodzenia>18.02.1967</data_urodzenia>
  20.            <klub>Brescia</klub>
  21.            <pozycja>napastnik</pozycja>
  22.            <bramek>216</bramek>
  23.      </pilkarz>
  24.      <pilkarz>
  25.            <imie>Roy</imie>
  26.            <nazwisko>Keane</nazwisko>
  27.            <data_urodzenia>10.08.1971</data_urodzenia>
  28.            <klub>Celtic FC</klub>
  29.            <pozycja>napastnik</pozycja>
  30.            <bramek>74</bramek>
  31.      </pilkarz>
  32.      <pilkarz>
  33.            <imie>Luis</imie>
  34.            <nazwisko>Enrigue</nazwisko>
  35.            <data_urodzenia>08.05.1970</data_urodzenia>
  36.            <klub>FC Barcelona</klub>
  37.            <pozycja>Pomocnik</pozycja>
  38.            <bramek>12</bramek>
  39.      </pilkarz>
  40.      <pilkarz>
  41.            <imie>Lilian</imie>
  42.            <nazwisko>Thuram</nazwisko>
  43.            <data_urodzenia>01.01.1972</data_urodzenia>
  44.            <klub>FC Barcelona</klub>
  45.            <pozycja>Obrońca</pozycja>
  46.            <bramek>47</bramek>
  47.      </pilkarz>
  48.      <pilkarz>
  49.            <imie>Michael</imie>
  50.            <nazwisko>Platini</nazwisko>
  51.            <data_urodzenia>21.06.1955</data_urodzenia>
  52.            <klub>Juventus Turyn</klub>
  53.            <pozycja>Ofensywa</pozycja>
  54.            <bramek>60</bramek>
  55.      </pilkarz>
  56.      <pilkarz>
  57.            <imie>Michael</imie>
  58.            <nazwisko>Owen</nazwisko>
  59.            <data_urodzenia>14.12.1979</data_urodzenia>
  60.            <klub>Newcastle United</klub>
  61.            <pozycja>Napastnik</pozycja>
  62.            <bramek>174</bramek>
  63.      </pilkarz>
  64.      <pilkarz>
  65.            <imie>George</imie>
  66.            <nazwisko>Weah</nazwisko>
  67.            <data_urodzenia>01.10.1966</data_urodzenia>
  68.            <klub>Manchester City</klub>
  69.            <pozycja>Napastnik</pozycja>
  70.            <bramek>30</bramek>
  71.      </pilkarz>
  72.      <pilkarz>
  73.            <imie>Dino</imie>
  74.            <nazwisko>Zoff</nazwisko>
  75.            <data_urodzenia>28.02.1942</data_urodzenia>
  76.            <klub>Juventus Turyn</klub>
  77.            <pozycja>Pomocnik</pozycja>
  78.            <bramek>32</bramek>
  79.      </pilkarz>
  80.      <pilkarz>
  81.            <imie>Zinedine</imie>
  82.            <nazwisko>Zidane</nazwisko>
  83.            <data_urodzenia>23.06.1972</data_urodzenia>
  84.            <klub>Real Madryt</klub>
  85.            <pozycja>Napastnik</pozycja>
  86.            <bramek>135</bramek>
  87.      </pilkarz>
  88.      <pilkarz>
  89.            <imie>Rob</imie>
  90.            <nazwisko>Rensenbrink</nazwisko>
  91.            <data_urodzenia>03.07.1947</data_urodzenia>
  92.            <klub>Toulouse FC</klub>
  93.            <pozycja>Lewoskrzydłowy</pozycja>
  94.            <bramek>75</bramek>
  95.      </pilkarz>
  96.      <pilkarz>
  97.            <imie>Andrij</imie>
  98.            <nazwisko>Szewczenko</nazwisko>
  99.            <data_urodzenia>29.09.1976</data_urodzenia>
  100.            <klub>AC Milan</klub>
  101.            <pozycja>Lewoskrzydłowy</pozycja>
  102.            <bramek>190</bramek>
  103.      </pilkarz>
  104.      <pilkarz>
  105.            <imie>Alan</imie>
  106.            <nazwisko>Shearer</nazwisko>
  107.            <data_urodzenia>13.08.1970</data_urodzenia>
  108.            <klub>Southampton F.C.</klub>
  109.            <pozycja>Napastnik</pozycja>
  110.            <bramek>100</bramek>
  111.      </pilkarz>
  112.      <pilkarz>
  113.            <imie>Omar</imie>
  114.            <nazwisko>Sivori</nazwisko>
  115.            <data_urodzenia>02.10.1935</data_urodzenia>
  116.            <klub>Juventus Turyn</klub>
  117.            <pozycja>Napastnik</pozycja>
  118.            <bramek>26</bramek>
  119.      </pilkarz>
  120.      <pilkarz>
  121.            <imie>Nílton</imie>
  122.            <nazwisko>Santos</nazwisko>
  123.            <data_urodzenia>16.05.1927</data_urodzenia>
  124.            <klub>Botafogo Rio de Janeiro</klub>
  125.            <pozycja>Pomocnik</pozycja>
  126.            <bramek>34</bramek>
  127.      </pilkarz>
  128.      <pilkarz>
  129.            <imie>Karl-Heinz</imie>
  130.            <nazwisko>Rummenigge</nazwisko>
  131.            <data_urodzenia>25.09.1955</data_urodzenia>
  132.            <klub>Servette Genewa</klub>
  133.            <pozycja>Napastnik</pozycja>
  134.            <bramek>45</bramek>
  135.      </pilkarz>
  136. </pilkarze>

Kod sortujący w XSL:
  1. <?xml version="1.0" encoding="ISO-8859-2" ?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:output method="html"/>
  4.  
  5. <xsl:template match="/">
  6. <xsl:apply-templates/>
  7. </xsl:template>
  8. <xsl:template match="pilkarze">
  9.      <HTML>
  10.            <HEAD> <TITLE> Pilkarze </TITLE></HEAD>
  11.            <BODY>
  12.                  <div align="center">
  13.                  <table style="border: 1px dashed black;">
  14.                        <tr>
  15.                              <td style="border: 1px solid black; text-align:center;">
  16.                                    <b>Id</b>
  17.                              </td>
  18.                              <td style="border: 1px solid black; text-align:center;">
  19.                                    <b>Imie</b>
  20.                              </td>
  21.                              <td style="border: 1px solid black; text-align:center;">
  22.                                    <b>Nazwisko</b>
  23.                              </td>
  24.                              <td style="border: 1px solid black; text-align:center;">
  25.                                    <b>Data Urodzenia</b>
  26.                              </td>
  27.                              <td style="border: 1px solid black; text-align:center;">
  28.                                    <b>Klub</b>
  29.                              </td>
  30.                              <td style="border: 1px solid black; text-align:center;">
  31.                                    <b>Pozycja</b>
  32.                              </td>
  33.                              <td style="border: 1px solid black; text-align:center;">
  34.                                    <b>Bramki</b>
  35.                              </td>
  36.                        </tr>
  37.                        <xsl:for-each select="//pilkarz">
  38.                        <xsl:sort select="nazwisko" data-type="text" order="ascending"/>
  39.                        <tr>
  40.                              <td style="border-left:1px solid black;
  41.                                                     border-bottom: 1px solid black; border-right: 1px solid black; padding-left:3px;
  42.                                                     padding-right:3px;">
  43.                                    <xsl:number/>
  44.                              </td>
  45.                              <td style="font-size:14pt; color:blue; border-left: 1px solid black;
  46.                                                     border-bottom: 1px solid black; border-right: 1px solid black; padding-left:3px;
  47.                                                     padding-right:3px;font-family:'Times New Roman', Times, serif">
  48.                                    <xsl:value-of select="imie"/>
  49.                              </td>
  50.                              <td style="border-left:1px solid black;
  51.                                                     border-bottom: 1px solid black; border-right: 1px solid black; padding-left:3px;
  52.                                                     padding-right:3px;">
  53.                                    <xsl:value-of select="nazwisko"/>
  54.                              </td>
  55.                              <td style="font-weight: bold; text-align:center; border-left:1px solid black;
  56.                                                     border-bottom: 1px solid black; border-right: 1px solid black; padding-left:3px;
  57.                                                     padding-right:3px;">
  58.                                    <xsl:value-of select="data_urodzenia"/>
  59.                              </td>
  60.                              <td style="border-left:1px solid black;
  61.                                                     border-bottom: 1px solid black; border-right: 1px solid black; padding-left:3px;
  62.                                                     padding-right:3px;">
  63.                                    <xsl:value-of select="klub"/>
  64.                              </td>
  65.                              <td style="border-left:1px solid black;
  66.                                                     border-bottom: 1px solid black; border-right: 1px solid black; padding-left:3px;
  67.                                                     padding-right:3px;">
  68.                                    <xsl:value-of select="pozycja"/>
  69.                              </td>
  70.                              <td style="font-style:italic; font-size:12pt; border-left:1px solid black;
  71.                                                     border-bottom: 1px solid black; border-right: 1px solid black; padding-left:3px;
  72.                                                     padding-right:3px;">
  73.                                    <xsl:value-of select="bramek"/>
  74.                              </td>
  75.                        </tr>
  76.                        </xsl:for-each>                        
  77.                  </table>
  78.                  </div>
  79.                  <HR/>
  80.                        <a href="plik.xml">Wszyscy pilkarze z bazy danych</a><BR/>
  81.                        <a href="urodzeni.xml">Urodzeni w roku 1972</a><BR/>
  82.                        <a href="imie.xml">Imie: Michael</a><BR/>
  83.                        <strong>Sortuj według</strong><BR/>
  84.                        <a href="nazw.xml">Nazwisk</a><BR/>
  85.                        <a href="klub.xml">Klubu</a><BR/>
  86.                        <a href="bramki.xml">Ilości strzelonych bramek</a><BR/>
  87.                  <HR/>
  88.                  Dane Pobrane ze strony:<a href="http://pl.wikipedia.org/wiki/Kategoria:Piłkarze_FIFA_100" title="Szczegółowe informacje">
  89.                  pl.wikipedia.org</a>
  90.            </BODY>
  91.      </HTML>
  92. </xsl:template>
  93.  
  94. </xsl:stylesheet>


Nie dawno całkiem pisałem aplikację dla XML i miałem tam dokładnie ten sam problem co ty musiałem sortować dane, tyle że nie w kolejności alfabetycznej tylko wg dat. użyłem do tego funkcji parsujących XML i jakiejść funkcji do XSLT, z tego co pamiętam funkcja do XSLT mnie mocno zawiodła bo nie zadziałała tak jak sobie tego zażyczyłem tzn. formatowanie się zgadzało, dane były wyświetlane w tabeli w odpowiedni żądany przeze mnie sposób z tym że nie posortowało mi tego wg dat ani wg żadnych innych kryteriów, wkurzyłem się mocno (po długim czasie czytania dokumentacji DOMXML oraz SimpleXML i jeszcze jakiejść tam biggrin.gif). więc poszedłem nieco na około i załadowałem cały plik XML do tablicy asocjacyjnej (przydaje się funkcja
  1. <?php
  2. ?>
) a następnie posortowałem sobie ją wykorzystując funkcję uasort i tyle :] W sumie zastanawiam się co by się stało gdyby plik XML zawierał baaaardzo dużo rekordów, ale ja w moim przypadku nie było to aż tak istotne. PZDR


--------------------
------
Per Aspera Ad Astra
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: 27.06.2025 - 19:04