Подтвердить что ты не робот

Использование XPath для поиска node в контексте node не работает (firefox/firebug/javascript)

Я хочу извлечь информацию с веб-страницы.

На странице есть m узлов, которые могут быть найдены .evaluate( "//div [@ class= 'news']", document,....).

Для каждого из указанных выше узлов внутри них есть 3 узла. Каждый из них имеет другой селектор @class. И я хочу извлечь эти m 3-кортежные записи.

Я попытался использовать функцию .evaluate(), как указано в

https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript

используя этот код

parentNodes = document.evaluate("//div[@class='news']", document, ....).
while (true){
   var node = parentNodes.iterateNext();
   var child = document.evaluate("//div[@class='title']", node, ....). 
   ...
}

Тем не менее, "child" всегда присваивается первому node в документе вместо первого node внутри "node".

Я запустил это в консоли firebug.

Кто-нибудь знает, что неправильно?

4b9b3361

Ответ 1

вы вызываете оценку в документе. Следовательно, выражение XPath оценивается из корня дерева XML. Кроме того, если вы хотите, чтобы XPath выбирал node из текущего контекста, например. среди детей текущего node вы должны использовать селектор контекста ".//"

Ответ 2

Если вы запускаете выражение XPath с помощью "/", вы начинаете с корня node/document node контекста node. Поэтому вместо "//div[@class = 'title']" используйте "descendant::div[@class = 'title']", таким образом вы выбираете дочерние элементы div из контекста node.

Ответ 3

Вы также можете использовать селектор пути местоположения descendant-or-self. Например: descendant-or-self::div... для ссылки, начиная с node, переданной как контекст.

Надеюсь, я помог.