Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [xml][DOM] sama podstawa
marcinek37
post
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


Mam kod:
  1. <?
  2. $doc = new DOMDocument();
  3. $doc->loadHTML('<HTML><A HREF="ss">asd</A>');
  4. echo $doc;
  5. ?>


Dopóki nie dodam ostatniej linijki, błędu nie ma. Jeśli tylko dowiem się w czym leży problem, od razu będę mógł iść dalej z tematem.

phhpinfo() mówi:
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.6.26
HTML Support enabled
XPath Support enabled
XPointer Support enabled
Schema Support enabled
RelaxNG Support enabled
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


HTML nie zawsze jest poprawnym dokumentem XML ;] - więc ze stronami niemal zawsze będzie podobnie... mając tego świadomość możesz wyłączyć wyświetlanie błędów przy tej funkcji
@$objDOM->load("http://www.onet.pl");

kod strony zapisanej z obiektu DOM może trochę odbiegać od źródeł... gdy będziesz więcej programował i poznawał inne języki to polecam korzystanie z silnika przeglądarki np. WebKit w Fremworku Qt (ale to już język C++)...

na razie nie przejmuj się tymi błędami... jednak możesz mieć problemy z kodowaniem niektórych stron - czytaj dokumentację i komentarze jak sobie z tym poradzić ;] - dasz radę...

wszystkie linki w wyr. xpath nie ważne gdzie się znajdują to po prostu "//a", z kolei wewnątrz jakiegoś obiektu o określonym id nie bezpośrednie dzieci to "//*[@id="cos_tam"]//a" - zwracaj uwagę kiedy np. stosować "//" a kiedy "/", ale to już chyba doczytałeś... i podobnie jak przykłady wyżej jeśli szukasz xpath względem jakiegoś elementu to zaczynaj wyrażenie od "./"

ps. względem wyr. CSS "//" odpowiada spacji " " a "/" odpowiada ">"

Cytat(marcinek37 @ 12.04.2013, 02:04:14 ) *
1. wydaje się, że to ta metoda: createElement przerabia kod HTML na encje
a nie ma ona żadnych dodatkowych parametrów... zrobiłem to łopatologicznie - wygenerowałem plik, a potem go przerobiłem innym skryptem - innego rozwiązania chyba nie znajdziemy

  1. <?php
  2. error_reporting(E_ALL|E_STRICT);
  3. ini_set('display_errors', '1');
  4.  
  5. $oDom = new DOMDocument('1.0', 'utf-8');
  6. $oDom->formatOutput = true;
  7. $oProductList = $oDom->appendChild($oDom->createElement('products_list'));
  8. $oProduct = $oProductList->appendChild($oDom->createElement('product'));
  9. $oProduct->appendChild($oDom->createElement('id', 1));
  10. $oName = $oProduct->appendChild($oDom->createElement('name')); /* @var $oName DOMNode */
  11. $sName = '<b>AAA';
  12. $oDomTmp = new DOMDocument('1.0', 'utf-8');
  13. // na wszelki wypadek doklejamy body żeby nie tworzyło paragrafów w czystym tekście,
  14. // jeśli wystąpi 2 razy body to zostanie pominięte
  15. @$oDomTmp->loadHTML('<body>'.$sName); // wyciszenie błędów przy niepoprawnych html'ach
  16. $oBody = $oDomTmp->getElementsByTagName('body')->item(0); /* @var $oBody DOMNode */
  17. foreach ($oBody->childNodes as $oEl) { /* @var $oEl DOMNode */
  18. $oName->appendChild($oDom->importNode($oEl, TRUE));
  19. }
  20. echo $oDom->saveXML();

Cytat(marcinek37 @ 12.04.2013, 02:04:14 ) *
2. postanowiłem wgłębić się w DOM, dla przykładu chcę wykonać listę linków znajdujących się na onecie
  1. <?
  2. $objDOM = new DOMDocument();
  3. $objDOM->load("http://www.onet.pl");
  4. ?>

no i pokazała się ogromna lista błędów - czyja to wina? skryptu czy onetu?

  1. <?php
  2. error_reporting(E_ALL|E_STRICT);
  3. ini_set('display_errors', '1');
  4.  
  5. $oDOM = new DOMDocument();
  6. @$oDOM->loadHTMLFile("http://www.onet.pl");
  7. $oXPath = new DOMXPath($oDOM);
  8. echo $oXPath->query('//a')->length;


Ten post edytował zegarek84 12.04.2013, 12:14:15
Go to the top of the page
+Quote Post

Posty w temacie
- marcinek37   [xml][DOM] sama podstawa   8.04.2013, 14:15:55
- - nospor   CytatDopóki nie dodam ostatniej linijki, błędu nie...   8.04.2013, 14:20:51
- - marcinek37   kompletnie wypadło mi z głowy, taki jest błąd: Ca...   8.04.2013, 17:03:10
- - melkorm   RTFM http://pl1.php.net/manual/en/domdocument.save...   8.04.2013, 17:14:26
- - marcinek37   czy macie może linka do jakiegoś poradnika, ale w ...   8.04.2013, 17:30:53
- - zegarek84   niestety większość materiałów jest po angielsku......   8.04.2013, 21:24:37
- - marcinek37   zrobiłem postępy w temacie, ale zatrzymałem się na...   8.04.2013, 23:23:09
- - nospor   CytatWszystko jest ok, ale wartości się nie pokazu...   9.04.2013, 06:41:31
- - marcinek37   Po dodaniu tego kodu pokazują się takie błędy: Not...   9.04.2013, 11:24:13
- - zegarek84   [PHP] pobierz, plaintext <?phperror_reporting...   9.04.2013, 20:01:30
- - marcinek37   świetnie, działa! a powiedz mi, "duże...   9.04.2013, 22:49:54
- - zegarek84   to zależy od ustawień serwera... ale każdy plik wc...   9.04.2013, 23:06:59
- - marcinek37   ok, a masz może jakiegoś linka do jakiegoś poradni...   10.04.2013, 00:51:33
- - zegarek84   popisz trochę w JavaScript, korzystaj z narzędzi t...   10.04.2013, 11:48:50
- - marcinek37   1. mam już troszkę rozszerzony kod: [PHP] pobierz,...   10.04.2013, 23:43:23
- - zegarek84   przede wszystkim zawsze wyświetlaj sobie błędy: er...   11.04.2013, 08:56:03
- - marcinek37   bardzo Ci dziękuję! 1. specjalnie w drugim pr...   11.04.2013, 11:11:22
|- - zegarek84   Cytat(marcinek37 @ 11.04.2013, 12:11...   11.04.2013, 12:58:51
- - marcinek37   czyli muszę korzystać z DOMDocument oraz DOMXPath,...   11.04.2013, 15:25:13
- - zegarek84   z PHP tak na szybko to przeczytaj sobie np. to: ht...   11.04.2013, 17:24:50
- - marcinek37   troszkę ciekawych informacji z tego linka wyciągną...   11.04.2013, 23:01:47
|- - zegarek84   Cytat(marcinek37 @ 12.04.2013, 00:01...   11.04.2013, 23:21:19
- - marcinek37   1. wydaje się, że to ta metoda: createElement prze...   12.04.2013, 01:04:14
- - zegarek84   HTML nie zawsze jest poprawnym dokumentem XML ;] -...   12.04.2013, 11:51:23
- - marcinek37   bardzo dziękuję za informacje szkoda tylko, że tr...   12.04.2013, 11:56:27
- - zegarek84   poprawiłem powyższy kod - xpath nie musisz używać ...   12.04.2013, 12:16:14
- - marcinek37   na razie nie chcę korzystać z DOMXPath, a skupić s...   12.04.2013, 15:45:21
- - zegarek84   przecież napisałem Ci wyżej, iż .load służy do wcz...   12.04.2013, 16:46:21
- - marcinek37   przepraszam, źle odczytałem Twoje wskazówki, jest ...   12.04.2013, 17:28:25
- - zegarek84   nie jestem z zawodu programistą ale dawniej do par...   12.04.2013, 21:24:10
- - marcinek37   przepraszam, że odpisuję Ci dopiero teraz, ale cał...   14.04.2013, 23:12:43


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 15:57