Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sprawdzenie ilości odnośników w kolumnie tabeli + odczytanie ich wartości przy pomocy Simple HTML DOM Parser
Forum PHP.pl > Forum > Przedszkole
uki8877
Witam

Zakładam nowy temat ,ponieważ może w przyszłości ktos bedzie mial podobny problem ,a wtedy rozwiazanie bedzie pod reką

mam taki string:

  1. <td class="td1">
  2. <a href="https://facebook.com">Odnosnik1</a>
  3. <a href="https://google.com">Odnosnik1</a>
  4. </td>


niby banalne do wyciagniecia danych, jednak jest problem ,poniewaz kolumna o klasie td1 nie zawsze ma 2 linki ,ale czasami jeden czyli kod wyglada tak /:

  1. <td class="td1">
  2. <a href="https://facebook.com">Odnosnik1</a>
  3. </td>


tych kolumn moze byc duzo, a mnie zalezy aby wyciagnac z tego linki i tekst z linkow.

Mam taki kod :
  1. foreach($html->find('td[class=td1]') as $td1) {
  2.  
  3. libxml_use_internal_errors(true);
  4. $dom = new DOMDocument;
  5. $dom->loadHTML($td1);
  6.  
  7. switch ($dom->getElementsByTagName('a')->length)
  8. {
  9. case 1:
  10.  
  11. echo $dom->getElementsByTagName('a')->item(0)->textContent . "<br />";
  12. break;
  13.  
  14. case 2:
  15.  
  16. echo $dom->getElementsByTagName('a')->item(0)->textContent . "--";
  17. echo $dom->getElementsByTagName('a')->item(1)->textContent . "<br />";
  18. break;
  19.  
  20. }
  21.  
  22. }


Moze zaproponujecie lepszy sposob ,jesli istnieje :-)

No i przy takim kodzie nie moge wyciagnac linkow , gdy wpisuje
  1. $dom->getElementsByTagName('a')->item(0)->href;


to dostaje
"Undefined property: DOMElement::$href "

co w sumie jest normalne,bo tablica
  1. $dom->getElementsByTagName('a')->item(0)
nie zawiera odnośnika. Tak wiec w jaki sposob moge go wyciagnac ?

Pozdrawiam
CuteOne
Od tego są pętle wink.gif
  1. foreach ($dom->getElementsByTagName('a') as $node) {
  2. echo $node->textContent;
  3. }


edit: i po co 2x tworzysz $dom = new DOMDocument;?

edit2:
  1. <?php
  2.  
  3. libxml_use_internal_errors(true);
  4. $dom = new DOMDocument;
  5. $dom->loadHTML('<tr><td><a href="A">asd</a></td><td><a href="b">asd2</a><a href="c">asd3</a></td>');
  6.  
  7. foreach ($dom->getElementsByTagName('td') as $node) {
  8. foreach ($node->getElementsByTagName('a') as $a) {
  9. echo $a->getAttribute('href');
  10. }
  11. }
uki8877
Dzieki za odpowiedz

caly kod wyglada tak :

  1. $html = str_get_html($html);
  2.  
  3.  
  4.  
  5. foreach($html->find('td[class=td1]') as $td1) {
  6.  
  7. libxml_use_internal_errors(true);
  8. $dom = new DOMDocument;
  9. $dom->loadHTML($td1);
  10.  
  11.  
  12. switch ($dom->getElementsByTagName('a')->length)
  13. {
  14. case 1:
  15.  
  16. echo $dom->getElementsByTagName('a')->item(0)->textContent . "<br />";
  17. break;
  18.  
  19. case 2:
  20.  
  21. echo $dom->getElementsByTagName('a')->item(0)->textContent . "--";
  22. echo $dom->getElementsByTagName('a')->item(1)->textContent . "<br />";
  23. break;
  24.  
  25. }
  26.  
  27. }


moze doradzisz co tu jest niepoprawne i dlaczego ? jesli chodzi o parsowanie to zaczynam z tym zabawe ,getAttribute znalazlem przypadkowo w ktoryms komentarzu z tego linka : http://php.net/manual/en/domdocument.getel...tsbytagname.php :-)
CuteOne
  1. libxml_use_internal_errors(true);
  2. $dom = new DOMDocument;
  3. $dom->loadHTML($html);
  4. $xpath = new DomXpath($dom);
  5.  
  6. foreach($xpath->query("//td[contains(concat(' ', normalize-space(@class), ' '), ' td1 ')]") as $td1) {
  7. foreach ($td1->getElementsByTagName('a') as $a) {
  8. echo $a->textContent . "<br />";
  9. }
  10. }
uki8877
nice, dopiero przed chwila ogarnalem ze pierwsza czesc mojego kodu korzystala z zewnetrznej biblioteki PHP, a druga z wbudowanej :-D
musze lepiej zajrzec do dokumentacji ,dzieki za pomoc :-)
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.