PHP DOMDocument: как выбрать все ссылки под определенным тегом - PullRequest
1 голос
/ 23 декабря 2010

Я только начинаю использовать php DOMDocument и у меня возникли небольшие проблемы.Как бы я выбрал все узлы ссылки под конкретным узлом, скажем,

в jquery, я мог бы просто сделать .. $ ('h5> a'), и это дало бы мне все ссылки под h5.

как мне сделать это в php, используя методы DOMDocument?Я попытался использовать phpquery , но по какой-то причине он не может прочитать html-страницу, которую я пытаюсь проанализировать.

Ответы [ 3 ]

1 голос
/ 23 декабря 2010

Насколько я знаю, jQuery переписывает запросы селектора в XPath. Любой узел, который может выбрать jQuery, XPath также может.

h5 > a означает выбор любого узла a, для которого прямым родительским узлом является h5. Это можно легко перевести на запрос XPath: //h5/a.

Итак, используя DOMDocument:

$dom = new DOMDocument;
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//h5/a');

foreach ($nodes as $node) {
   // do stuff
}
1 голос
/ 23 декабря 2010

Получите все h5 теги из него и пройдитесь по каждому из них, проверяя, является ли его родительский тег a.

// ...
$h5s = $document->getElementsByTagName('h5');
$correct_tags = array();
foreach ($h5s as $h5) {
    if ($h5->parentNode->tagName == 'a') {
        $correct_tags[] = $h5;
    }
}
// do something with $correct_tags
1 голос
/ 23 декабря 2010

Получите DOMElement , чьи дети вам интересны, и вызовите DOMElement :: getElementsByTagName на нем.

...