web-dev-qa-db-fra.com

XPath obtient la valeur d'attribut dans PHP

Duplicata possible:
Comment extraire un attribut de nœud à partir de XML en utilisant l'analyseur DOM de PHP

Comment extraire une valeur de balise HTML?

HTML:

<input type="hidden" name="text1" id="text1" value="need to get this">

PHP:

$homepage = file_get_contents('http://www.example.com');
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
@$doc->loadHTML($homepage);
$xpath = new DOMXpath($doc);
$filtered = $xpath->query("//input[@name='text1']");

Comment puis-je faire en sorte que value soit "besoin d'obtenir ceci"?

Mise à jour:

Je l'ai fait fonctionner et j'espère que cela aidera aussi les autres. Après le code ci-dessus, j'ai obtenu la valeur par:

echo $filtered->item(0)->getAttribute('value');
30
jerrymouse

XPath peut faire le travail d'obtention de l'attribut value avec $xpath->query("//input[@name='text1']/@value");. Ensuite, vous pouvez parcourir la liste des nœuds de nœuds d'attributs et accéder à $value propriété de chaque nœud d'attribut.

35
Martin Honnen

Regardez cette méthode de DOM http://www.php.net/manual/en/domelement.getattribute.php

var array_result = arrray();
foreach (filtered as $key => $value){

    $array_result[] = $value->getAttribute('ID'); 

}
11
TROODON

Je ne connais pas la syntaxe PHP pour cela, mais pour sélectionner l'attribut value, vous utiliseriez le xpath suivant:

//input[@name='text1']/@value

Cependant, xpath ne renvoie pas de chaînes, il renvoie des nœuds. Vous voulez le nodeValue du nœud, donc si PHP suit la convention, ce code serait:

 $xpath->query("//input[@name='text1']/@value")->item(0).nodeValue;

À des fins d'apprentissage, gardez à l'esprit que vous vérifiez toujours la propriété nodeValue. Donc, si vous vouliez le nom du même élément, vous utiliseriez:

 $xpath->query("//input[@name]/@name")->item(0).nodeValue;

Vous souhaitez probablement vous assurer que la requête renvoie une valeur non nulle avant d'interroger également la propriété nodeValue.

8
fearphage