Question

Tout en essayant d'analyser le langage HTML à l'aide de Yahoo Query Language et de la fonctionnalité xpath fournie par YQL, je ne pouvais pas extraire & # 8220; text () & # 8221; ou des valeurs d'attributs.
Par exemple.
lien permanent

select * from html where url="http://stackoverflow.com" 
and xpath='//div/h3/a'

donne une liste d'ancres au format xml

<results>
    <a class="question-hyperlink" href="/questions/661184/filling-the-text-area-with-the-text-when-a-button-is-clicked" title="In ASP.net, I need the code to fill the text area (in the form) when a button is clicked. Can you help me through by showing a simple .aspx code containing the script tag? ">Filling the text area with the text when a button is clicked</a>...
</results> 

Maintenant, lorsque j'essaie d'extraire la valeur du noeud à l'aide de

select * from html where url="http://stackoverflow.com" 
and xpath='//div/h3/a/text()'

j'obtiens des résultats concaténés plutôt qu'une liste de nœuds par exemple.

<results>Xcode: attaching to a remote process for debuggingWhy is b
…… </results>

Comment le séparer en listes de nœuds et comment sélectionner des valeurs d'attributs ?

Une requête comme celle-ci

select * from html where url="http://stackoverflow.com"
and xpath='//div/h3/a[@href]'

m'a donné les mêmes résultats pour l'interrogation div/h3/a

Était-ce utile?

La solution

YQL requiert que l'expression xpath soit évaluée en tant que itemPath plutôt que le texte du nœud. Mais une fois que vous avez un itemPath, vous pouvez projeter différentes valeurs de l’arbre

En d’autres termes, un élément ItemPath devrait pointer vers le nœud dans le code HTML résultant plutôt que vers le contenu / les attributs de texte. YQL renvoie tous les nœuds correspondants et leurs enfants lorsque vous sélectionnez * dans les données.

exemple

select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

Ceci retourne tous les a correspondant au xpath. Maintenant, pour projeter le contenu du texte, vous pouvez le projeter à l’aide de

.
select content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

" content " renvoie le contenu du texte contenu dans le nœud.

Pour projeter les attributs, vous pouvez le spécifier par rapport à l'expression xpath. Dans ce cas, puisque vous avez besoin du href qui est relatif à un.

select href from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

cela retourne <results> <a href="/questions/663973/putting-a-background-pictures-with-leds"/> <a href="/questions/663013/advantages-and-disadvantages-of-popular-high-level-languages"/> .... </results>

Si vous aviez besoin des attributs 'href' et textContent, vous pouvez exécuter la requête YQL suivante:

select href, content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'

renvoie:

<results> <a href="/questions/663950/double-pointer-const-issue-issue">double pointer const issue issue</a>... </results>

J'espère que ça aide. faites-moi savoir si vous avez d'autres questions sur YQL.

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