Question

J'utilise pQuery (un port Perl de jQuery) pour sélectionner des éléments et récupérer le texte d'un document HTML.

Considérez le balisage suivant:

<x>
   <y>code1</y>
   <z>stuff</z>
   <y>code2</y>
   <z>foobar</z>
</x>

Et le code pQuery suivant:

my $target_value = pQuery($markup)->find($pquery_selector)->text;

J'essaie de formuler $ pquery_selector de sorte qu'il corresponde à < z > foobar < / z > dans le balisage ci-dessus à l'aide de la règle suivante: recherchez le < code> z -élément qui suit un élément y qui a un corps contenant "code2" / . Bien que cela soit possible avec jQuery, je ne suis pas sûr que la syntaxe de pQuery soit suffisamment puissante pour gérer une telle expression.

Ce type de sélection est-il possible en utilisant la syntaxe pQuery?

Était-ce utile?

La solution

Dans jQuery, il pourrait être possible d’écrire un sélecteur tel que 'y: contient (code2) + z'. Cependant, pQuery est toujours inachevé (à partir de la version 0.07) et un sélecteur comme x + z donne simplement une erreur démontrant que le développeur du module n’a pas encore traduit cette partie du code jQuery.

Puisque pQuery n’a plus été touché depuis 2008, je vous conseillerais de le réparer vous-même (le code est sur cpan et github), ou d’utiliser un module plus mature comme HTML :: TreeBuilder :: XPath (qui nécessite un apprentissage). Syntaxe XPath, mais fonctionne en réalité pour des choses non triviales).

L'équivalent XPath du sélecteur jQuery ci-dessus serait '// y [contient (text (),' code2 ')] / following-sibling :: z'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top