Захват <tr> с помощью простого HTML Dom на основе внутреннего текста <th>, но <th> не имеет атрибутов

У меня есть HTML, который выглядит следующим образом, и я пытаюсь использовать простой HTML DOM, чтобы получить значение имени и псевдонима.

<tr>.....</tr>
<tr>.....</tr>
<tr>
<th>Name</th>
<td>John</td>
</tr>
<tr>
<th><span>Nickname</span></th>
<td>Johny</td>
</tr>
<tr>.....</tr>
<tr>.....</tr>

У меня возникли трудности, так как у th и тд нет id или классов

поэтому я попытался использовать значение innertext с помощью следующего кода PHP

require_once('lib/simple_html_dom.php');
$url='http://123.com';
$html = file_get_html($url);

foreach ( $html->find ( 'tr th' ) as $element ) {

if ($element->innertext = 'Name'){

    $element = $element->parent;

    $tinfo = $element->find ( 'td', 0 );

    $info = $tinfo->plaintext;

    echo $info;}
}

$html = file_get_html($url);
foreach ( $html->find ( 'tr th span' ) as $element ) {

if ($element->innertext = 'Nickname'){

    $element = $element->parent;

    $tinfo = $element->find ( 'td', 0 );

    $info = $tinfo->plaintext;

  echo $info;}
}

Я не мог получить приведенный выше код, чтобы работать какие-либо советы по этому поводу? Как мне это сделать?

1 ответ

Решение

После удаления некоторых конфликтующих скриптов Мой новый код, по совету Ghost, теперь работает для очистки имени и псевдонима.

<?php
$name = $nickname ='';
foreach($html->find('tr') as $tr) { // each row
    foreach($tr->childNodes() as $tdh) { // each cell of that row
        if($tdh->tag == 'th' && $tdh->innertext == 'Name') {
            $name = $tdh->next_sibling()->innertext;
        }
    }
}

echo $name;
foreach($html->find('tr th') as $tr) { // each row
    foreach($tr->childNodes() as $tdh) { // each cell of that row
        if($tdh->tag == 'span' && $tdh->innertext == 'Nickname') {
            $nickname = $tdh->parent->next_sibling()->innertext;
        }
    }
}

echo $nickname;
?>

Благодарим Ghost за ответ.

Другие вопросы по тегам