Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Zagnieżdżony teskt
chcicha
post 27.03.2014, 22:37:19
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.03.2014

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


Witam,

Mam strukturę strony:
  1.  
  2. [..]
  3. [...]
  4. <div class="aaa">Lorem ipsum [...]</div>
  5. [...]
  6. <div class="bbb"> Lorem ipsum [...]
  7. <div class="aaa"> Lorem ipsum [...]</div>
  8. Lorem ipsum [...]
  9. </div>
  10. Lorem ipsum [...]
  11. [...]
  12. <div class="bbb"> Lorem ipsum [...]
  13. <div class="aaa">
  14. Lorem ipsum2323 [...]
  15. <div class="ccc">
  16. hdsgad Lorem ipsum [...]
  17. <div class="aaa">INTERESUJĄCY FRAGMENT</div>
  18. </div>
  19. dvsdjf Lorem ipsum [...]
  20. </div>
  21. vLorem ipsum [...]
  22. </div>


Jak wyciągnąć tekst który jest w aaa ale w zagnieżdżeniu: body->bbb->aaa->ccc->aaa [tekst].
Próbowałem z wyrażeniami regularnymi ale tam mi wyszukuje wszystkie aaa a ja nie znam który index w tablicy znalezionych match będzie odpowiedni.
Go to the top of the page
+Quote Post
vonski
post 27.03.2014, 22:53:39
Post #2





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Może potraktuj to jak zwykłego XML-a i użyj XPath do znalezienia interesujących Cię danych. Coś w tym rodzaju:

  1. $str = '<body><div> ......... '; // Twoja struktura HTML
  2. $xml = simplexml_load_string($str);
  3.  
  4. $divs = $xml->xpath('//div[@class="bbb"]/div[@class="aaa"]'); // tworzy kolekcję div.aaa będących potomkami div.bbb
  5.  
  6. foreach($divs as $div) {
  7. echo $div;
  8. }


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post
kreatiff
post 27.03.2014, 23:20:48
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Wyrażeniami regularnymi to będzie trzeba pewnie jakiś look behind zastosować.
  1. preg_match('#(?<=<div class="ccc">).*<div class="aaa">(.*?)</div>#us', $a, $b);
Ale to dość grząski grunt w zależności od skomplikowania kodu.
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: 6.07.2025 - 20:02