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

Résolu/Fermé
deltawi - 30 janv. 2013 à 13:55
 deltawi - 1 févr. 2013 à 13:48
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 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
31 janv. 2013 à 00:24
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
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 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
31 janv. 2013 à 15:49
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
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