Page 1 sur 1

En SimpleXML (ou Xpath) lire les éléments d'un div identifié

Posté : 14 août 2011, 23:17
par Bosyphe
Bonjour à tous

J'ai besoin de connaître le contenu de divers éléments d'un div défini par son id.

Par exemple, le fichier xhtml que je dois analyser commence par la structure suivante :
<div id="Main_parameters">
<p>Intro (contenant des infos que je dois extraire)</p>
<dl>
  <dt>Paramètre 1</dt>
    <dd>valeur</dd>
  <dt>Paramètre 2</dt>
    <dd>valeur</dd>
  <dt>Paramètre 3</dt>
    <dd>valeur</dd>
  [...]
  <dt>Paramètre i</dt>
    <dd>valeur</dd>
  [...]
  <dt>Paramètre n (je ne connais pas la valeur de n)</dt>
    <dd>valeur</dd>
</dl>
</div>
Comment, en utilisant SimpleXML ou Xpath, puis-je connaître le contenu du paragraphe, ainsi que le contenu des couples dt - dd, en faisant référence au div "Main_parameters" ?

Merci grandement pour votre aide

Re: En SimpleXML (ou Xpath) lire les éléments d'un div identifié

Posté : 15 août 2011, 01:10
par devlop78
Peut-être que DOMDocument te serais plus approprié.

Sinon ...
Foreach ($simpleXml as $item) //$item is each div
{
if ($item['id'] == 'lol')
{
...
}
}
Quelque chose de ce genre

Re: En SimpleXML (ou Xpath) lire les éléments d'un div identifié

Posté : 15 août 2011, 12:02
par Bosyphe
Merci de ta réponse, devlop

Ton approche est une solution possible, mais dans la mesure où je dois lire beaucoup de paramètres répartis en plusieurs endroits du documents, je préfère travailler en m'appuyant sur la logique SimpleXML ou Xpath.

Par exemple, je peux atteindre le 3ème dt en précisant le chemin suivant la syntaxe SimpleXML :
$xml_document = new SimpleXMLElement('Mon_document.html', NULL, TRUE);  // Le paramètre TRUE indique qu'il s'agit d'un fichier ou d'une url et non d'une chaîne de caractères)

$contenu_par_simplexml =  $xml_document -> body -> div[0] -> div[0] -> dl -> dt[2]; 
echo $contenu_div;
Je n'arrive cependant pas à obtenir l'équivalent en utilisant xpath. Le code
$contenu_par_xpath = $xml_document -> xpath('/ body / div[0] / div[0] / dl / dt[0]');
print_r($contenu_par_xpath);
affiche Array()

Ce que je veux obtenir, c'est de pouvoir sélectionner dt en partant directement du div "Main_parameters", car je ne connais pas forcément la structure exacte du fichier xhtml analysé.
Par exemple, en Xpath:
$contenu_par_xpath = $xml_document -> xpath('div[@id="Main_parameters"]/dl/dt[i]');
ou l'équivalent en SimpleXML.

Merci de votre aide

Re: En SimpleXML (ou Xpath) lire les éléments d'un div identifié

Posté : 16 août 2011, 09:39
par Bosyphe
Bonjour en ce début de semaine,

Malgré une journée entière passée à chercher sur le Net, je n'ai pas pu trouver comment obtenir la liste des enfants d'un noeud dont on connaît l'identificateur. (Tous les exemples que je trouve, souvent répétés d'un site à l'autre, expliquent comment lire l'attribut d'un noeud, mais pas comment partir d'un noeud possédant un attribut donné pour connaître les enfants de ce noeud.)

J'abandonne pour l'instant et vais extraire les paramètres dont j'ai besoin à l'aide de regex. En effet, mes div de paramétrage ne contiennent pas de divs ; je peux donc assez facilement connaître le contenu de couples <dt>...</dt><dd>...</dd> en définissant des regex encadrées par <dt> et </dd>.


Si toutefois vous pensez à une solution simple, je suis preneur.

Bonne journée