Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czym parsować HTML/XHTML?
Forum PHP.pl > Forum > XML, AJAX > XML
ignition
Czym parsować HTML/XHTML?? Chciałbym zrobić edytor stron, które już istnieją (np. o2.pl tongue.gif ).
Tak aby załadować każdą stronę, nawet, te które są niezgodne ze standardami - w takim przypadku większość. Najlepiej, bybyło, aby parser nie ładował struktóry strony do pamięci, ponieważ źle później ją składa.
Próbowałem bezskutecznie z:
- Dom z opcją loadHtml (miejwięcej idzie, ale tylko miejwięcej:P - czyli błędnie )
- Simplexml (nic nie daje )
- wyższe opcje z poprawieniem strony w tidy (czasami na oko wygląda dobrze, ale tylko czasami - czyli nic to nie daje )
Proszę o pomoc!!!
dr_bonzo
Do HTML dolaczyli XML tworzac XHTML co pozwala na latwiejsze parsowanie takich dokumentow, parsery odrzucaja dokumenty, ktore nie sa poprawnymi plikami XML (patrz prawie kazdy HTML). Brudny (untidy) html jest trudny w parsowaniu -- parser musi sie domyslac co tworca kodu mial na mysli, musi poprawiac jego bledy (ale jak??). Wniosek -- parsowanie brudnego HTMLa jest trudne.

W jaki sposob chcesz edytowac te strony? Nie wystrczy ci podglad kodu?
ignition
Wiem o tym i dlatego potrzebuje parsera, który nie będzie wczytywał struktóry do pamięci (dzięki temu nie zmodyfikuje zbytnio kodu), lecz będzie odnajdywał element (które są znacznikami html/xhtml) posiadające tekst ( np: <p>tekst</p> ).
Gdy odnajdzie taki element przykładowo zmieni ten tekst na formularz lub dołączy odnośnik do strony, w której będzie można zedytować te dane.
Po drugie nie wystarczy mi podgląd kodu ponieważ ten skrypt ma być stosowany przez takich co się na html/xhtml nie znają lub takich co chcą szybko zmienić swoją stronę.
060156
Tutaj masz przyklad kodu:
  1. <?php
  2.  $html = stripslashes($html);
  3. $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
  4. foreach($a as $i=>$e)
  5. {
  6. if($i%2==0)
  7. {
  8. //Text
  9. }
  10. else
  11. {
  12. //Tag
  13. if($e{0}=='/')
  14. $this->CloseTag(strtoupper(substr($e,1)));
  15. else
  16. {
  17. //Extract attributes
  18. $a2=explode(' ',$e);
  19. $tag=strtoupper(array_shift($a2));
  20. $attr=array();
  21. foreach($a2 as $v)
  22. if(ereg('^([^=]*)=["']?([^"']*)["']?$',$v,$a3))
  23. $attr[strtoupper($a3[1])]=$a3[2];
  24. $this->OpenTag($tag,$attr);
  25. }
  26. }
  27. }
  28. }
  29.  
  30.  
  31. function OpenTag($tag,$prop)
  32. {  //Opening tag
  33.  }
  34.  
  35. function CloseTag($tag)
  36. {
  37. //Closing tag
  38. }
  39. ?>

prosze uzywac tagów php
aleksander
romek04
Zobacz tutaj:
http://www.scrapingsystems.com/

pozdrawiam
romek
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.