Вопрос

Пытаясь проанализировать html с помощью Yahoo Query Language и функциональности xpath, предоставляемой YQL, я столкнулся с проблемами, связанными с невозможностью извлечь “text()” или значения атрибутов.
Например, для
постоянная ссылка

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

выдает список якорей в виде 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> 

Теперь, когда я пытаюсь извлечь значение узла, используя

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

Я получаю результаты, объединенные, а не список узлов например

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

Как я могу разделите его на списки узлов и как мне выберите значения атрибутов ?

Запрос, подобный этому

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

дал мне те же результаты для запроса div/h3/a

Это было полезно?

Решение

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'

"содержимое" возвращает текстовое содержимое, хранящееся внутри узла.

Для проецирования атрибутов вы можете указать его относительно выражения 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top