Я разместил ТАК вопрос: PHP DOM пересекает узлы HTML и дочерний узел

Кто-то любезно дал мне решение для этого. Однако данные, которые я анализирую, на самом деле имеют несколько тегов гиперссылок, как показано ниже:

<tr>
<td>DATA 1</td>
<td><a href="12345" target="_top">DATA 2</a></td>
<td><a href="other_link">DATA 3</a></td> 
</tr>

Мой желаемый вывод - выбрать только href (например, «12345») для тега гиперссылки с целью "_top".

Мой текущий код выбирает все теги гиперссылки в таблице.

foreach ($dom->getElementsByTagName('td') as $node) {
    foreach ($node->getElementsByTagName('a') as $node){
       $array_href[]= $node->getAttribute('href');
    }
$array_data[] = $node->nodeValue;
}
0
Jean-Claude 24 Апр 2017 в 16:06

2 ответа

Лучший ответ

target - это просто еще один атрибут, например href. Получите значение и сравните:

foreach ($node->getElementsByTagName('a') as $node){
   if ($node->getAttribute('target') === '_top') {
       $array_href[]= $node->getAttribute('href');
   }
}
0
Matt S 24 Апр 2017 в 13:09

При циклическом просмотре тегов a создайте новый if, который проверяет, содержит ли узел атрибут target со значением _new, т.е.

foreach ($dom->getElementsByTagName('td') as $node) {
    foreach ($node->getElementsByTagName('a') as $node){
        if ($node->getAttribute('target') == '_top') {
            $array_href[] = $node->getAttribute('href');
        }
    }
    $array_data[] = $node->nodeValue;
}
0
CONvid19 24 Апр 2017 в 13:21
43588940