Question

J'utilise la bibliothèque PHP QueryPath pour extraire les données d'une collection d'anciens fichiers HTML, et pour la plupart, j'ai utilisé les sélecteurs CSS disponibles via la fonction Find () pour extraire des données. Cependant, tous les éléments contenant des données que j'ai besoin pour extraire n'ont pas un identifiant CSS unique, donc j'ai utilisé une combinaison laide de regexp et de querypath pour extraire les données.

<ul class="list><li>Data1</li><li>Data2</li></ul>

Comment, par exemple, extraire proprement "Data2" de cet élément de liste? Y a-t-il une fonction QueryPath qui me permettra de spécifier, par exemple, le deuxième enfant d'un élément parent comme l'élément à récupérer?

Était-ce utile?

La solution

Pour obtenir l'objet assorti du nième, vous pouvez utiliser QueryPath::get(n-1).

Autres conseils

Il existe en fait plusieurs façons de le faire. Le plus facile est d'utiliser le CSS 3 pSeduduclass :nth-of-type(). Cela obtient le deuxième Li directement à l'intérieur de l'ul:

qp($html, 'ul>li:nth-of-type(2)');

:nth-of-type Et d'autres sélecteurs CSS 3 prennent ce que l'on appelle les règles "An + B", où vous pouvez dire combien d'éléments constituent un groupe, puis dire quel élément du groupe que vous souhaitez. Par exemple, tr:nth-of-type(4n+2) Va séparer les lignes de table en groupes de 4, puis renvoyer le deuxième élément de chaque groupe. :even et :odd sont juste un sténographie pour 2n et 2n+1.

Autres CS qui pourraient valoir la peine d'être examinés:

  • ': nth'
  • ': Premier-de-type', ': First'
  • ': dernier de type', ': Last'
  • ':même bizarre'
  • ': non ()', ': a ()' et ': contient ()'

Vous pouvez également obtenir tous les éléments Li, puis obtenir le deuxième:

qp($html, 'li')->eq(2);

Ou, comme indiqué une affiche précédente, vous pouvez obtenir le véritable DOMNode objet pour le second en utilisant get():

qp($html, 'li')->get(2);

Si vous avez des besoins vraiment sophistiqués, vous pouvez utiliser filter() Pour prendre une liste et exécuter une fonction personnalisée.

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