Je suis nouveau sur xpath et je rencontre des problèmes avec l'ancienne implémentation XPath de PHP. Est-il exact que //@url
est simplement la forme abrégée de //attribute::url
? Je suis en train d'interroger le flickr rss pour les tests, mais la requête abrégée trouve les noeuds corrects, alors que celui verbeux retourne 0 éléments:Sélection de la valeur de l'attribut avec le chemin xpath de PHP
$xml = file_get_contents('http://api.flickr.com/services/feeds/geo/?format=rss_200');
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);
$xpath->query('//media:content/@url')->length > 0;
$xpath->query('//media:content/attribute::url')->length == 0;
Est-ce que je méprendre sur le w3c specs ou est-ce un bug PHP?
question connexe:
La requête réussie retourne DOMAttr
objets comme prévu. Mais n'y a-t-il aucun moyen d'obtenir la valeur textuelle de ces nœuds directement? Quelque chose comme //media:content/attribute::url/child::text()
? J'en aurais besoin pour un outil où les requêtes xpath seront entrées par les utilisateurs et la détection d'erreur serait bien meilleure si je pouvais attendre des objets DOMText (au lieu de coder pour une multitude d'objets DOM *).
Thx, mais l'utilisation de evaluate() n'a pas aidé. J'ai essayé d'ajouter l'espace de noms, aussi - pas de succès. Je ne sais pas avec certitude, mais je pense que les espaces de noms sont extraits du document par PHP, de toute façon. – soulmerge
dans ce cas, allez avec la forme abrégée. J'ai tendance à préférer le format verbeux dans de nombreux cas (descendant ou soi par exemple) mais je ne peux pas dire que j'ai essayé d'utiliser l'attribut verbeux :: axe –
Merci beaucoup de l'avoir testé :) – soulmerge