Récupérer contenue <p></p> dans un DIV by Id [DOM,PHP]

Résolu
deltawi -  
 deltawi -
Bonjour,

Je souhaite récupérer le contenue des paragraphes dans un div précis (identifié par un id) dans une page HTML avec mon code PHP en utilisant Document Object Model (DOM) :

<div id = "pop">
<p> Contenue 1 </p>
<p> Contenue 2 </p>
..
</div>

Merci d'avance.

1 réponse

JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
Salut,
<?php
$content = '<html>
<head>
</head>

<body>
	<div id="pop"> 
		<p> Contenue 1 </p> 
		<p> Contenue 2 </p> 
	</div>
</body>
</html>';

$doc = new DomDocument;
$doc->validateOnParse = true;
$doc->LoadHTML($content);

$p = $doc->getElementById('pop')->getElementsByTagName('p');

foreach($p AS $elem) {
	echo $elem->nodeValue.'<br />';
}
?> 

1
deltawi
 
Merci pour ta réponse Joos. J'ai une autre question si ça ne te dérange pas.
Le contenue que je souhaite récupérer est en Arabe, quand j'utilise ce code il me renvoie ''Invalid char in CDATA 0x1F in Entity'' . Il ne reconnait pas les caractères Arabe. HELP ! :)
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
De rien :)

Y a un problème d'encodage avec la classe Dom !

Pour y remédier, tu dois changer d'encodage !

$doc->LoadHTML(mb_convert_encoding(file_get_contents('page.html'), 'HTML-ENTITIES', 'UTF-8'));
0
deltawi
 
Merci encore j'ai essayer ce que tu as dit mais ça me renvoie la même erreur. Mais je te rassure j'ai fini par trouver une solution un peu tiré par les cheveux mais elle marche. J'ai utiliser la class "simple_html_dom" voici le code :

require_once "simple_html_dom.php";
$test=new simple_html_dom;
$test->load_file('page.html');
$wikipediaPage = new DOMDocument();
@$wikipediaPage->loadHTML($test);
$params = $wikipediaPage->getElementsByTagName('div');
$k=0;
$fin = "";
foreach ($params as $param) //go to each section 1 by 1
{
if($params->item($k)->getAttribute('id')=="article_body")
{
$liste = $param->getElementsByTagName('p');
foreach($liste as $p)
//echo $p->nodeValue;
$fin .= $p->nodeValue;
}
$k++;
}
echo $fin;
0