Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czytanie pliku XML
Forum PHP.pl > Forum > PHP
akurczyk
Potrzebuję przeczytać plik XML (jak bazę danych) z poziomu PHP.
Wiem że można pobrać SAXa ale nie chcę żadnych klas, i proszę nie robić offtopa dlaczego, porostu nie.

Plik XML:
Kod
<newsy>
     <news>
         <tytul>Drug news</tytul>
         <tresc>Treść drugiego newsa</tresc>
         <dodane>11-11-2011 11:11:11</dodane>
     </news>
     <news>
          <tytul>Pierwszy news</tytul>
          <tresc>Treść pierwszego newsa</tresc>
          <dodane>10-10-2010 10:10:10</dodane>
      </news>
</newsy>


Chcę te newsy wyświetlić jak dane z bazy.
batman
Jak to sobie wyobrażasz, że "czytasz" plik XML bez żadnej biblioteki? Jedyne co możesz zrobić, to wyświetlić te dane w przeglądarce przy użyciu transformacji XSLT.
bigZbig
Najprościej zrobisz to używając SimpleXml. Wszelkie inne rozwiązania to niepotrzebne kombinowanie
akurczyk
chodziło mi o napisanie parsera wyświetlającego te dane.
a funkcje xml_parse() itp?
podobny przypadek wszyscy piszą że do parsowania szablonu potrzebne są klasy, a ja jakoś rozwiązałem to nie obiektowy, w 3 linijkach.
batman
Czyli chcesz wymyślić od nowa koło. Po tą są gotowe biblioteki, by z nich korzystać. Jestem pewien, że Twój parser będzie wolniejszy i miał mniejsze możliwości od tych, które są wbudowane w PHP.
mike
Cytat(bigZbig @ 24.10.2008, 10:55:14 ) *
Najprościej zrobisz to używając SimpleXml. Wszelkie inne rozwiązania to niepotrzebne kombinowanie
Bzdura!
SimpleXML to jedno z rozwiązań, nie lepsze i nie gorsze od innych. Po prostu dedykowane do pewnych potrzeb.
Chętnie zobaczę jak czytasz za pomocą SimpleXML plik 50MB tongue.gif Wtedy najzwyklej najlepszym rozwiązaniem jest XMLReader.

Wszystkie biblioteki mają plusy i minusy i nie ma lepszych i gorszych. Dobiera się je do aktualnych potrzeb.
akurczyk
Potrzebuję parser konkretnie do newsów z tego pliku XML, a nie uniwersalnego molocha.
Ni wynajduję koła na nowo tylko robię konkurencyjne bardziej okrągłe koło jak iPhone i Omnia.
Riklaunim
Cytat(akurczyk @ 24.10.2008, 14:06:48 ) *
Potrzebuję parser konkretnie do newsów z tego pliku XML, a nie uniwersalnego molocha.
Ni wynajduję koła na nowo tylko robię konkurencyjne bardziej okrągłe koło jak iPhone i Omnia.


Jakiego molocha. W PHP5 masz dwie możliwości czytania XML i najprostszy to SimpleXML. Oba rozszerzenia to binarne elementy PHP i są bardzo wydajne.
akurczyk
ale żeby zastosować biny musiał bym być adminem serwa.
więc pozostają gotowe klasy których niech.
w takim wypadku muszę napisać coś wlanego minimalistycznego tylko do obsługi tych newsów XML.
mike
Cytat(akurczyk @ 24.10.2008, 14:24:57 ) *
ale żeby zastosować biny musiał bym być adminem serwa
A może zamiast chrznic niestworzone głupoty to spróbuj?
Żeby skorzystać z echo też musisz być adminem?
dr_bonzo
Dzizez, chcesz pisac to pisz, SAM!
Masz rozdzial w manualu do operacji na funkcjach tekstowych, wyrazenia regularne, czytaj, pisz i pochwal sie.
akurczyk
żeby skorzystać z echo muszę mieć konto na serwerze z php.
czyli że te biblioteki są już zainstalowane?
to jak je używać
phpion
Cytat(akurczyk @ 24.10.2008, 14:24:57 ) *
muszę napisać coś wlanego minimalistycznego tylko do obsługi tych newsów XML.

W takim razie napisz to, a nie nawijaj, że musisz to napisać.

Swoją drogą: zauważ, iż osoby piszące w tym topicu mają "troszkę" więcej doświadczenia w programowaniu w PHP niż ty. Skoro więc sugerują ci inne rozwiązanie niż twoje to może coś w tym jest?

PS: aż się dziwię, że gość nie ma jeszcze ani jednego warna - poziom jego postów i podejście do problemów jest wręcz żenujące...

PS2: zauważyłem, że w tym temacie wypowiada się w zasadzie stara gwardia smile.gif daty rejestracji 2003 - 2005 thumbsupsmileyanim.gif
johnson
  1. <?php
  2. function readnews($filename)
  3. {
  4.  
  5. // czytanie pliku
  6. $xml_string = join('', file($filename));
  7.  
  8. // usuniecie znaków końca linii z całego pliku (tak, aby powstał jednolity ciąg)
  9. $order = array("r\n", "\n", "r");
  10. $replace = '';
  11. $xml_string = str_replace($order, $replace, $xml_string);
  12.  
  13. // podzielenie na części
  14. $pieces = explode('</news>', $xml_string);
  15.  
  16. // parsowanie i umieszczenie danych w tablicy asocjacyjnej
  17. $data = Array();
  18. foreach ($pieces as $value)
  19. {
  20.   if (eregi("<tytul>([^<]*)</tytul>[^<]*<tresc>([^<]*)</tresc>[^<]*<dodane>([^<]*)</dodane>", $value, $out))
  21.   {
  22.      $news = Array();
  23.      $news["tytul"] = $out[1];
  24.      $news["tresc"] = $out[2];
  25.      $news["dodane"] = $out[3];
  26.      $data[] = $news;
  27.   }
  28. }
  29. return $data;
  30. }
  31.  
  32. $data = readnews('news.xml');
  33. ?>


Nie jest to może najlepsze rozwiązanie, ale chyba takie o jakie chodziło. Nie wiem czy działa, bo nie testowałem, jeśli będą jakieś błędy to powinieneś sobie poradzić.
Riklaunim
Cytat(akurczyk @ 24.10.2008, 14:37:58 ) *
żeby skorzystać z echo muszę mieć konto na serwerze z php.
czyli że te biblioteki są już zainstalowane?
to jak je używać


Zadajesz w pierwszy poście pytanie, a chyba zupełnie nie masz pojęcia o PHPie i serwerach (i o "własnym hostingu"?). Na początek skończ gimnazjum, po tym poczytaj trochę o XHTML/CSS, po czym zabrać się możesz za języki dynamiczne.

SimpleXML jest częścią PHP5 i nie trzeba niczego instalować, czy kombinować jak koń pod górę.
http://pl2.php.net/manual/en/simplexml.examples.php
http://www.php.rk.edu.pl/w/p/simplexml/
akurczyk
myślałem ze sxml to klasa jak bbcode czy paginatory.

temat do zamknięcia lub usunięcia

dzięki za pomoc
phpion
Cytat(akurczyk @ 24.10.2008, 16:03:50 ) *
myślałem ze sxml to klasa jak bbcode czy paginatory.

sciana.gif Nie mogłeś wcześniej sprawdzić zamiast się mądrzyć?

Cytat(akurczyk @ 24.10.2008, 16:03:50 ) *
temat do zamknięcia lub usunięcia

Na szczęscie o tym nie decydujesz ty tylko moderatorzy.

@Moderacja:
Przepraszam za OT.
akurczyk
Faktycznie głupio zrobiłem że tego nie sprawdziłem.
A temat jest do zamknięcia lub usunięcia bo problem jest już rozwiązany.
  1. <?php
  2. $plik = simplexml_load_file("newsy.xml");
  3. foreach($plik as $wartosc) {
  4.    echo "Tytuł: {$wartosc->tytul}<br>";
  5.    echo "Treść: {$wartosc->tresc}<br>";
  6. }
  7. ?>
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.