YQL требует, чтобы выражение xpath оценивалось в itemPath, а не в тексте узла. Но когда у вас есть itemPath, вы можете проецировать различные значения из дерева
Другими словами, ItemPath должен указывать на узел в результирующем HTML, а не на текстовое содержимое / атрибуты. YQL возвращает все совпадающие узлы и их потомки, когда вы выбираете * из данных.
пример
select * from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
Это возвращает все a, соответствующие xpath. Теперь для проецирования текстового контента вы можете проецировать его, используя
select content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
«content» возвращает текстовое содержимое, хранящееся в узле.
Для проецирования атрибутов вы можете указать его относительно выражения xpath. В этом случае, так как вам нужен href относительно a.
select href from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
это возвращает
<results>
<a href="/questions/663973/putting-a-background-pictures-with-leds"/>
<a href="/questions/663013/advantages-and-disadvantages-of-popular-high-level-languages"/>
....
</results>
Если вам нужен и атрибут href, и textContent, вы можете выполнить следующий запрос YQL:
select href, content from html where url="http://stackoverflow.com" and xpath='//div/h3/a'
возвращается:
<results> <a href="/questions/663950/double-pointer-const-issue-issue">double pointer const issue issue</a>... </results>
Надеюсь, это поможет. дайте мне знать, если у вас есть еще вопросы по YQL.