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

Signaler
-
 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

Messages postés
2483
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
217
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 77496 internautes nous ont dit merci ce mois-ci

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 ! :)
Messages postés
2483
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
217
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'));
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;