Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: XML+PHP - za duży plik xml
Forum PHP.pl > Forum > XML, AJAX > XML
dr_grucha
Witam, mam następujący problem. Mam napisany skrypt pobierajacy zawartosc pliku xml i przedstawiajacy go w odpowiedni sposob. Jest on opart na XPath
  1. <?
  2.  
  3. require_once(&#092;"XPath.class.php\");
  4.  
  5. $sXml = getFileText(&#092;"ofertaTest2.xml\");
  6. $xPath = new XPath();
  7. $xPath->importFromString($sXml);
  8.  
  9. $result = $xPath->match(&#092;"///book\");
  10. $countResult = count($result);
  11. for ($i = 0; $i < $countResult; $i++)
  12. {
  13. $thisId = getAsXhtml( $xPath->getAttributes($result[$i],
  14. &#092;"indeks\") );
  15. $autorzy = getAsXhtmlFromCdata(
  16. $xPath->getData($result[$i] . &#092;"/autorzy\") );
  17.  
  18. echo &#092;"<p>\";
  19. echo &#092;"ID: \" . $thisId . \"<br />\";
  20. echo &#092;"<strong>Autorzy: \" . $autorzy . \"</strong>\";
  21. echo &#092;"</p>\";
  22. }
  23.  
  24. function getAsXhtml($text)
  25. {
  26. $text = str_replace(&#092;"&\", \"&amp;\", $text);
  27. $text = str_replace(&#092;"<\", \"&lt;\", $text);
  28. $text = str_replace(&#092;">\", \"&gt;\", $text);
  29. return $text;
  30. }
  31.  
  32. function getAsXhtmlFromCdata($text)
  33. {
  34. $text = str_replace(&#092;"<![CDATA[\", \"\", $text);
  35. $text = str_replace(&#092;"]]>\", \"\", $text);
  36. return $text;
  37. }
  38.  
  39. function getFileText($filePath)
  40. {
  41. $fileText = &#092;"\";
  42. $fileArray = file($filePath);
  43. $countFile = count($fileArray);
  44. for ($i = 0; $i < $countFile; $i++)
  45. $fileText .= $fileArray[$i];
  46.  
  47. return $fileText;
  48. }
  49.  
  50. ?>


A przykladowa baza do niego wyglada nastepujaco:

  1. <?xml version="1.0" encoding="ISO-8859-2"?>
  2.  
  3. <!DOCTYPE stuff SYSTEM "http://www.azymut.pl/oferta/db.dtd">
  4. <stuff transactionId="83674-1005834138171">
  5. <books>
  6. <book indeks="34780800205KS">
  7.        <autorzy><![CDATA[Andrzejewski Jerzy]]></autorzy>
  8.        <tytul><![CDATA[Noc i inne opowiadania]]></tytul>
  9.        <wydawca><![CDATA[CZYTELNIK]]></wydawca>
  10.        <podtytul><![CDATA[]]></podtytul>
  11.        <liczbatomo>0</liczbatomo>
  12.        <nrkolejnyt>0</nrkolejnyt>
  13.        <tytultomu><![CDATA[]]></tytultomu>
  14.        <jezykoryg></jezykoryg>
  15.        <tytuloryg><![CDATA[]]></tytuloryg>
  16.        <tlumacze></tlumacze>
  17.        <jezyki>polski</jezyki>
  18.        <seriacykl>BIBLIOTEKA CZYTELNIKA</seriacykl>
  19.        <tematyka>LP</tematyka>
  20.        <rodzpb></rodzpb>
  21.        <kodwydawcy>21728</kodwydawcy>
  22.        <wydanie>1</wydanie>
  23.        <rokwyd>2001</rokwyd>
  24.        <objetosc>429</objetosc>
  25.        <format>13x20cm</format>
  26.        <oprawa>Twarda</oprawa>
  27.        <ciezar>0.47499999999999998</ciezar>
  28.        <isbn>8307028507</isbn>
  29.        <issn></issn>
  30.        <uwagi><![CDATA[]]></uwagi>
  31.        <opis><![CDATA[Wznawiany obecnie w Bibliotece "Czytelnika" tom Noc i inne opowiadania Jerzego Andrzejewskiego został wydany po raz pierwszy w 1963 roku w "czytelnikowskiej" serii Głowy Wawelskie. Z dziesięciu zamieszczonych w nim opowiadań cztery - Przed s&plusmn;dem, Apel, Wielki Tydzień i Warszawianka - ukazały się w 1945 roku w zbiorze zatytułowanym Noc. Opowiadania.          Redakcja]]></opis>
  32.        <miejscowosc>Warszawa</miejscowosc>
  33.        <kod_paskowy>9788307028507</kod_paskowy>
  34.        <wysokosc>25</wysokosc>
  35.        <typ_pub>KS</typ_pub>
  36.        <image>1</image>
  37. </book>
  38.  
  39. </books>
  40. <new>
  41.   <item indeks="34809901458KS" data_now="2001-11-15"/>
  42. </new>
  43. </stuff>


I teraz nie wiem co zrobic, ponieważ cała baza (to co wyżej to tylko wycinek) zajmuje az 1,5MB i uruchomiajac skrypt pokazuje blad parsera ze uplynal limit czasu a zreszta nawet gdyby tego limitu nie bylo to strona ladowala by sie w nieskonczonosc dry.gif
Prosze o pomoc
j00seph
3lo

Cytat
uruchomiajac skrypt pokazuje blad parsera ze uplynal limit czasu a zreszta nawet gdyby tego limitu nie bylo to strona ladowala by sie w nieskonczonosc


No właśnie dlatego pliki XML nie nadaja sie na baze danych (po jak rozumiem to co ro bisz to ma być jakaś baza danych na stronie WWW / wirtualna biblioteka itp ) , jedyne co ci mogę poradzić to to abyś przeżucił te dane na baze mysql i dalej selectem
hawk
Spróbuj zrzucić sobie do jakiegoś logu, ile zajmuje przetworzenie jednej pozycji za pomocą xpath. Jeżeli strona ładuje się "w nieskończoność", to masz błąd w kodzie. Inaczej powinien być stały odcinek czasu na jedną pozycję.

Jeżeli to trwa zbyt długo, zrezygnuj z xpath. I tak trzeba przeczytać cały plik, więc może simplexml? Albo, biorąc pod uwagę statyczność i prostotę danych, najprostszy sax?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.