| Autor | Zpráva | ||
|---|---|---|---|
| frantik Profil * |
#1 · Zasláno: 16. 4. 2013, 03:38:43 · Upravil/a: Moderátor (editace znemožněna) 16. 4. 2013, 09:19:29
Dobré ráno,
chci se zeptat co dělám špatně. Vše si vytahuju jak potřebuju, ale problém nastává, když to chci stylovat. Zjistil jsem, že to nejde po sobě jak jsem si původně myslel a chtěl. Ví někdo kde dělám chybu a popřípadě by byl tak hodný a opravil? Předem moc děkuju preg_match_all("/<div.*?>([^`]*?)<\/div>/", $site_vystup[0], $match);
foreach($match[0] as $lin){
preg_match('~src="([^"]*)"~', $lin, $img);
preg_match("#href=\"date.fcgi(.*?)\"#", $lin, $link);
preg_match("#<div.*?>(.*?)</div>#", $lin, $d1);
preg_match('@<div class="content">(.*?)</div>@si', $lin, $d2);
echo "<div class=\"img\"><img src=".$img[1]."></div>";
echo "<div style=\"float:left\"><a ".$link[0].">Odkaz</a>";
echo strip_tags($d1[0]);
echo strip_tags($d2[0])."</div>
<br class=\"end\">
";
}Moderátor Joker: Prosím nenakopávat vlákno nekonstruktivními příspěvky. Viz pravidla.
|
||
| frantik Profil * |
#2 · Zasláno: 16. 4. 2013, 09:28:58
Napadlo mne to vyřešit takhle:
echo preg_replace('~src="([^"]*)"~', $lin);
To nevypíše už vůbec nic |
||
| Joker Profil |
#3 · Zasláno: 16. 4. 2013, 09:34:36
frantik:
A co vlastně znamená „Zjistil jsem, že to nejde po sobě jak jsem si původně myslel a chtěl“? |
||
| frantik Profil * |
#4 · Zasláno: 16. 4. 2013, 09:46:19
No chtěl jsem ve vetsím množství kodu vybrat obrázek, odkaz a nějaký text. Ten potom nastylovat, ale při stylování jsem zjistil, že to nejde jak jsem chtěl.
Jak jsem to uvedl, tak když to dám do stylu, tak se provede přibližně tohle: <div class="start"> <div class="img"><img src="obrazek.jpg"></div> <div></div> </div> <div class="start"> <div></div> <div><a href="odkaz.html">Odkaz</a></div> </div> Ale já chtěl docílit tohoto: <div class="start"> <div class="img"><img src="obrazek.jpg"></div> <div><a href="odkaz.html">Odkaz</a></div> </div> |
||
| Joker Profil |
frantik:
Aha. Tak záleží na tom, jak vypadá vstupní kód, možná je prostě špatně ten regulární výraz. Uvedený výstup by to asi generovalo v případě, že na vstupu je nejdřív <div> jen s obrázkem a pak další <div> jen s odkazem. Druhá možnost je, že jestli ten vstup má víc vnořených <div>ů, bude to trpět tímhle problémem: obsah před <div>první <div>vnořený </div>ještě první </div> V každém případě na pohyb v HTML kódu nejsou regulární výrazy ideální (viz problém zmíněný výše), lepší by bylo použít HTML DOM. Edit: Smazal jsem z ukázkového kódu „div“ z obsahu, bylo to pak matoucí. |
||
| frantik Profil * |
#6 · Zasláno: 16. 4. 2013, 12:08:32 · Upravil/a: frantik
Tak jsem se na ten dom podíval a vypadá to pěkně. Jen mám problém, že mi to vyhazuje stejný výsledky:
$html = new simple_html_dom();
$html = str_get_html($site_vystup[0]);
foreach($html->find('img') as $e) {
echo $html->find('a', 0)." - ".$html->find('img', 0)."<br>\n";
}Takhle vypadá výstup: <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> Tak jsem se na ten dom podíval a vypadá to pěkně. Jen mám problém, že mi to vyhazuje stejný výsledky: $html = new simple_html_dom();
$html = str_get_html($site_vystup[0]);
foreach($html->find('img') as $e) {
echo $html->find('a', 0)." - ".$html->find('img', 0)."<br>\n";
}Takhle vypadá výstup: <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> <a href="date.fcgi?akce=ID=3719175">Odkaz</a> - <img class="fr border" src="/img/common/ico/F.gif" alt="Fotografie" /><br> |
||
| Joker Profil |
#7 · Zasláno: 16. 4. 2013, 12:24:42
frantik:
V každém cyklu se vždycky hledá to samé. Princip by asi měl být: foreach($html->find("prvek ve kterém je odkaz i obrázek" as $element)
{
// v $element se najde odkaz a pak obrázek
} |
||
| frantik Profil * |
#8 · Zasláno: 16. 4. 2013, 12:31:25 · Upravil/a: frantik
Jak to prosím zapsat do foreach, když to je takhle?
<div class="cool"> Našel jsem, že se to dělá takhle: foreach($html->find("div.cool img") as $e) {
echo $html->find('a', 0)." - ".$html->find('img', 0)."<br>\n";
}Oprava: Je to umístěné v <div class="cool arr"> foreach($html->find("div.cool arr img") as $e) { |
||
| Joker Profil |
#9 · Zasláno: 16. 4. 2013, 12:52:09
frantik:
Tak jestli to má najít div s třídou cool, mělo by to být takhle: $html->find("div.cool")A předpokládám, že uvnitř toho cyklu by místo $html mělo být $e. |
||
| frantik Profil * |
#10 · Zasláno: 16. 4. 2013, 12:56:32 · Upravil/a: frantik
foreach($html->find("div.cool arr") as $e) {
echo $e->find('a', 0)." - ".$e->find('img', 0)."<br>\n";
}Tohle taky nefunguje Chyba opravena :-) Už to maká. Dělal jsem chybu, že jsem vzal prvni div a ne ten ve kterém to přímo bylo. To znamená, ale že jsem tam kde jsem byl. Na text, který neni ve stejném divu budu muset použít jiný foreach a tudíš výsledek bude podobný. Jen s příjemnějším kodem. Jste super, že mi takhle radíte a vážím si toho, ale co teď ? |
||
| Joker Profil |
#11 · Zasláno: 16. 4. 2013, 14:17:44
frantik:
$html->find("div.cool arr")„Na text, který neni ve stejném divu budu muset použít jiný foreach a tudíš výsledek bude podobný.“ No tak jestli to není všechno v tom <div>u, asi nebyl nejlepší nápad dělat cyklus zrovna přes ně. Pokud existuje nějaký prvek, který sdružuje ty požadované údaje a zároveň ne údaje které se mají vypsat v dalším cyklu, stačí dělat cyklus přes něj. Jestli žádný takový „společný kontejner“ neexistuje, udělal bych cyklus třeba přes jednu položku, třeba odkazy, a druhou pak holt dohledával nějakým složitějším výrazem (jeho podoba závisí na tom, jak vypadají vstupní data). |
||
| frantik Profil * |
#12 · Zasláno: 16. 4. 2013, 14:39:19
Tak to jde udělat po více divech? Moc Vám děkuju už jsem díky Vám mnohem blíž k cílové čáře.
Zajimal by mě třeba příklad tohodle: <div class="stromek"> <div class="vetev1">Nějaký text</div> <div class="vetev2"> <strong>Nějaký text</strong> <strong class="color">Jsem silný</strong> </div> <div><a href="http://neco.cz">Odkaz</a></div> </div> |
||
|
Časová prodleva: 13 let
|
|||
0