0 votes

php : comment travailler avec du html en tant que xml ? comment trouver des noeuds spécifiques et obtenir le texte à l'intérieur de ces noeuds ?

Supposons que j'aie la page web suivante :

<html>
<body>
 <div class="transform">
    <span>1</span>
 </div>
 <div class="transform">
    <span>2</span>
 </div>
 <div class="transform">
    <span>3</span>
 </div>
</body>
</html>

Je voudrais trouver tous les éléments div qui contiennent la classe transform et récupérer le texte dans chaque élément div ?

Je sais que je peux le faire facilement avec des expressions régulières, mais j'aimerais savoir comment je peux le faire sans expressions régulières, mais en analysant le xml et en trouvant les nœuds dont j'ai besoin.

mise à jour

Je sais que dans cet exemple, je peux simplement itérer à travers toutes les divs, mais c'est un exemple juste pour illustrer ce dont j'ai besoin.

Dans cet exemple, je dois rechercher les divs qui contiennent l'attribut class=transform

merci !

1voto

xil3 Points 7220

On peut utiliser SimpleXML - voir l'exemple ci-dessous :

$string = "<?xml version='1.0'?> 
<html>
<body>
 <div class='transform'>
    <span>1</span>
 </div>
 <div>
    <span>2</span>
 </div>
 <div class='transform'>
    <span>3</span>
 </div>
</body>
</html>";

$xml = simplexml_load_string($string);
$result = $xml->xpath("//div[@class = 'transform']");

foreach($result as $node) {
  echo "span " . $node->span . "<br />";
}

Mise à jour avec xpath...

1voto

troelskn Points 51966

Vous pouvez utiliser xpath pour adresser les éléments. Pour cette requête particulière, vous utiliserez :

div[contains(concat(" ",@class," "), concat(" ","transform"," "))]

Exemple complet de PHP :

<?php
  $document = new DomDocument();
  $document->loadHtml($html);
  $xpath = new DomXPath($document);
  foreach ($xpath->query('div[contains(concat(" ",@class," "), concat(" ","transform"," "))]') as $div) {
    var_dump($div);
  }

Si vous connaissez le CSS, voici un sélecteur CSS pratique qui permet de faire correspondre l'expression XPath : http://plasmasturm.org/log/444/ -- Vous y trouverez l'exemple ci-dessus, ainsi que d'autres requêtes courantes.

Si vous l'utilisez souvent, vous trouverez peut-être ma csslib bibliothèque à portée de main. Elle offre une enveloppe csslib_DomCssQuery qui est similaire à DomXPath mais en utilisant des sélecteurs CSS à la place.

0voto

ufk Points 4939

Ok ce que je voulais peut être facilement réalisé en utilisant php xpath :

exemple :

http://ditio.net/2008/12/01/php-xpath-tutorial-advanced-xml-part-1/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X