Использование 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.
Кто-нибудь знает, что неправильно?
Ответы
Ответ 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, переданной как контекст.
Надеюсь, я помог.