Suite à cette vidéo :
http://www.grafikart.fr/tutoriels/php/html-parser-php-158
Je souhaites faire une parseur PHP.
Seulement, J'aimerais s’accéder seulement au premier noeud trouvé.
Exemple :
<article itemtype="http://schema.org/Article">
<span itemprop="name">Titre 1</span>
<article itemtype="http://schema.org/Article">
<span itemprop="name">Titre 2</span>
</article>
</article>
<article itemtype="http://schema.org/Article">
<span itemprop="name">Titre 3</span>
<article itemtype="http://schema.org/Article">
<span itemprop="name">Titre 3</span>
</article>
</article>
J'aimerais récupérer le premier article ( Titre 1 ) et le 3ème article ( Titre 3 ).
Sans leurs enfants donc.
Mon code est :
<?php
$html = file_get_html('test.html');
$json=array();
foreach($html->find('[itemtype="http://schema.org/Article"]') as $element){
$t++;
$json$t]$k]$element->find('[itemprop="name"]',0)->pleintext;
}
?>
Merci d'avance,
Ener-Getick
bonjour essaye ceci:
function get_tag_content( $tag, $html ) {
$tag = preg_quote($tag);
preg_match_all('{<'.$tag.'^>]*>(.*?)</'.$tag.'>.'}',
$html,
$matches,
PREG_PATTERN_ORDER);
return $matches[1];
}
si tu souhaite faire une recherche sur une balise avec un attribut particulier, tu peux faire:
$tag=array( 'name'=>'span', //ex: div, table, p,section....
'attr'=>array( 'name'=>'itemprop', // ex: id, class, style.....
'value'=>'name'
)
);
function get_tag_content( $tag, $html ) {
if( is_null($tag'name']) )
$tag'name'] = '\w+';
else
$tag'name'] = preg_quote($tag'name']);
$attr = preg_quote($tag'attr']'name']);
$value = preg_quote($tag'attr']'value']);
$tag_regex = "/<(".$tag'name'].")^>]*$attr\s*=\s*".
"('\"])$value\\2^>]*>(.*?)<\/\\1>/"
preg_match_all($tag_regex,
$html,
$matches,
PREG_PATTERN_ORDER);
return $matches[3];
}
Merci beaucoup ça marche !! :)
Je n'avais pas pensé d'y faire comme ça.
Ener-Getick