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

Eléphanteau du PHP | 37 Messages

14 août 2011, 23:17

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

devlop78
Invité n'ayant pas de compte PHPfrance

15 août 2011, 01:10

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

Eléphanteau du PHP | 37 Messages

15 août 2011, 12:02

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

Eléphanteau du PHP | 37 Messages

16 août 2011, 09:39

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