Как получить якорный текст с помощью DOMDocument?

Скажем, у меня есть этот html:

<a href="http://example.com">Test</a>

Я разбираю его, используя DOMDocument с этим кодом:

$dom = new DomDocument();
@$dom->loadHTML($html);
$urls = $dom->getElementsByTagName('a');

И затем я запускаю этот код:

foreach ($urls as $url)
{
    //echo "<br> {$url->getAttribute('href')} , {$url->getAttribute('title')}";
    foreach ($url->attributes as $a)
    {
        echo "<br>$a->name is $a->value";
    }
    echo "<hr><br>";
}

Когда я это делаю, я вижу только «href» как атрибут URL-адреса, нет никакого способа получить «якорный текст» (в приведенном выше случае «Тест»). Как я могу получить анкорный текст ссылки?


person Ali    schedule 07.01.2011    source источник


Ответы (3)


Используйте DOMNode::$nodeValue:

echo $url->nodeValue;
person lonesomeday    schedule 07.01.2011

Текст «Тест» на самом деле является текстовым узлом DOM, поэтому вы можете получить содержимое, пройдя через дочерние узлы $url.

Вы можете проверить этот пост для решения: Как получить innerHTML DOMNode?

person Christian Joudrey    schedule 07.01.2011
comment
На самом деле это предназначено для получения innerHTML, вы можете использовать nodeValue, если все, что вам нужно, это текст внутри, как указал @lonesomeday. - person Christian Joudrey; 07.01.2011

person    schedule
comment
у меня есть тег изображения в качестве анкорного текста ссылки. если я использую nodeValue, он ничего не возвращает. я использую find('a[href=url]') чтобы получить соответствующую якорную ссылку. Как я могу получить тег изображения ?? - person peter; 04.07.2011
comment
textContent ничего не возвращает. он должен вернуть что-то вроде ‹img src='someurl.jpg' alt='something'/›, но не - person peter; 04.07.2011
comment
внутренний текст сделал свое дело. теперь он возвращает тег изображения. спасибо - person peter; 04.07.2011