Проблемы с получением последующих запросов Xpath для работы - PullRequest
1 голос
/ 05 ноября 2011

Я пытаюсь получить доступ к нескольким элементам в нескольких запросах Xpath, используя первый запрос в качестве базы.

Я пытался:

$playerinfo = $xpath->query('//*[@class="PlayerHeader"]');
$playername = $xpath->query('/h3/a', $playerinfo);
echo $playername->item(0)->nodeValue;

Ничего не возвращается.Если я делаю

$playerinfo = $xpath->query('//*[@class="PlayerHeader"]/h3/a');
echo $playerinfo->item(0)->nodeValue;

Это работает нормально.Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2011
$playername = $xpath->query('/h3/a', $playerinfo); 

Вы пытаетесь оценить абсолютное выражение XPath для узла - это не имеет смысла.

Абсолютное выражение всегда оценивается, имея узел документа в качестве контекстаузел.

нет узла /h3 (верхний элемент, вероятно, html, а не h3, и поэтому также нет узла /h3/a).

Решение : Используйте относительное выражение: h3/a.

Рекомендация : прочтите о «Относительных и абсолютных выражениях XPath» и поймите этотема.

1 голос
/ 05 ноября 2011

$ playerinfo - это список совпадающих узлов - когда вы используете его в качестве контекста для последующего поиска, контекстом может быть только ОДИН узел, а не список узлов:

$playername = $xpath->query('/h3/a', $playerinfo->item(0));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...