Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]odczytanie ilosci znacznikow HTML z wykorzystaniem Simple HTML DOM Parser
uki8877
post 29.04.2016, 13:55:46
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 27.03.2016

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


Witam

Chcialbym obliczyc ilosc znacznikow option w danym select

teraz robie to tak;

  1. $optionsSum = 0;
  2.  
  3. foreach($html->find('select[id=select1] option') as $select) {
  4. if(preg_match_all('|<option.*?>(.+?)</option>|is', $select, $select, PREG_SET_ORDER)) {
  5. $optionsSum++;
  6. }
  7. }
  8.  
  9. echo $optionsSum;


I to działa poprawnie.

Jednak chciałbym dowiedzieć się czy istnieje lepszy, bardziej profesjonalny sposob ?

Pozdrawiam
Go to the top of the page
+Quote Post
KsaR
post 29.04.2016, 14:16:28
Post #2





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


  1. <?php
  2. $str = '<select>
  3. <option value="1">1</option>
  4. <option value="2">2</option>
  5. <option value="3">3</option>
  6. <option value="4">4</option>
  7. </select>';
  8.  
  9. $dom = new DOMDocument;
  10. $dom->loadHTML($str);
  11. echo $dom->getElementsByTagName('option')->length;

Tak działa, jednak nie wiem jak dorobić po id tongue.gif musisz pogooglowac.

Ten post edytował KsaR 29.04.2016, 14:28:09


--------------------
Go to the top of the page
+Quote Post
uki8877
post 29.04.2016, 14:51:58
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 27.03.2016

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


dzieki za odpowiedz, Twoj przyklad dziala tylko ze ja pobieram dane cURL'em wiec zamienilem loadHTML na load i pojawil sie problem, poniewaz wyswietla 0 ,chociaz powinno 5

moj kod :

  1. $dom = new DOMDocument;
  2. $dom->load($html);
  3. echo $dom->getElementsByTagName('option')->length;
Go to the top of the page
+Quote Post
trueblue
post 29.04.2016, 15:15:23
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Czyli masz źródło w postaci stringu, tak?
Powinieneś zrobić tak jak podał KsaR.


--------------------
Go to the top of the page
+Quote Post
uki8877
post 29.04.2016, 15:29:45
Post #5





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 27.03.2016

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


gdy zrobie tak jak podal Ksar to otrzymuje
"DOMDocument::loadHTML(): ID submitSearch already defined in Entity"
Go to the top of the page
+Quote Post
trueblue
post 29.04.2016, 15:33:23
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Ok, rozumiem dlaczego.
A loadXML?


--------------------
Go to the top of the page
+Quote Post
uki8877
post 29.04.2016, 15:37:52
Post #7





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 27.03.2016

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


Też próbowałem, wyrzuca podobny błąd co przy loadHTML. Jedynie samo load() nie wyrzuca błędów, jednak wyświetla 0, chociaż w zmiennej jest kod który posiada kilka OPTION
Go to the top of the page
+Quote Post
CuteOne
post 29.04.2016, 15:55:17
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Hmm, to jest ten porąbany walidator :| dodaj libxml_use_internal_errors() http://php.net/manual/en/function.libxml-u...rnal-errors.php + loadXML()

Ten post edytował CuteOne 29.04.2016, 15:58:16
Go to the top of the page
+Quote Post
KsaR
post 29.04.2016, 16:23:21
Post #9





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


  1. <?php
  2. $str = '<select id="select1">
  3. <option value="1">1</option>
  4. <option value="2">2</option>
  5. <option value="3">3</option>
  6. <option value="4">4</option>
  7. </select>'; // twój html
  8. preg_match("#<select id=\"select1\">(?<options>(.|\s)*)</select>#", $str, $output); // wyłapanie opcji w select id="select1".
  9. echo substr_count($output['options'], '<option'); // zliczenie wystąpień option w tym select.
  10. unset($output); // skasowanie wylapanej tablicy.

Hm. A tak?
Co prawda ten pattern' nie jest najlepszy ale cały kod działa jak trzeba, w dodatku wyłapuje po id. tongue.gif


--------------------
Go to the top of the page
+Quote Post
uki8877
post 29.04.2016, 17:03:33
Post #10





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 27.03.2016

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


Dzieki wielkie wszystkim za pomoc ,zastosowanie funkcji podanej przez CuteOne pomogło. Poniżej przedstawiam pełny kod :

  1. libxml_use_internal_errors(true);
  2. $dom = new DOMDocument;
  3. $dom->loadHTML($html); // zmienna $html przechowuje kod HTML strony pobranej przy pomocy cURL
  4. echo $dom->getElementsByTagName('option')->length;


Ten post edytował uki8877 29.04.2016, 17:04:03
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 06:06