2016-06-03 3 views
0

Я использую PHPDocument и DOMXPath. Я пытаюсь получить атрибут с значением типа json. Но я не получаю точного значения. Я мог бы получить другие атрибуты хорошо, но не это. HTML выглядитPHP DOM: получить атрибут с DOM

<a href="URL" title="{tt4438848=Nicholas Stoller (dir.), Seth Rogen, Rose Byrne, tt2567026=James Bobin (dir.), Mia Wasikowska, Johnny Depp, tt3498820=Anthony Russo (dir.), Chris Evans, Robert Downey Jr., tt2948356=Byron Howard (dir.), Ginnifer Goodwin, Jason Bateman, tt3385516=Bryan Singer (dir.), James McAvoy, Michael Fassbender, tt1985949=Clay Kaytis (dir.), Jason Sudeikis, Josh Gad, tt3068194=Whit Stillman (dir.), Kate Beckinsale, Chloë Sevigny, tt3799694=Shane Black (dir.), Russell Crowe, Ryan Gosling, tt3040964=Jon Favreau (dir.), Neel Sethi, Bill Murray, tt2241351=Jodie Foster (dir.), George Clooney, Julia Roberts}">X-Men: Apocalypse</a> 

Если я использую echo $dom->getAttribute("href"); выход URL
Если я использую echo $dom->getAttribute("title"); выход Bryan Singer (dir.), James McAvoy, Michael Fassbender

Я не могу получить значение атрибута точно.

Редактировать ссылка phpfiddle.org/main/code/dvj5-zf0q

Может кто-нибудь помочь ?? Я новичок в PHPDOM. Заранее спасибо

+0

Не ответ, но значение этого атрибута не JSON. – alex

+0

@alex Итак, нет способа получить это? –

ответ

2

Чтобы получить атрибут название:

<?php 
$html = <<<EOF 
<html> 
<a href="URL" title="{tt4438848=Nicholas Stoller (dir.), Seth Rogen, Rose Byrne, tt2567026=James Bobin (dir.), Mia Wasikowska, Johnny Depp, tt3498820=Anthony Russo (dir.), Chris Evans, Robert Downey Jr., tt2948356=Byron Howard (dir.), Ginnifer Goodwin, Jason Bateman, tt3385516=Bryan Singer (dir.), James McAvoy, Michael Fassbender, tt1985949=Clay Kaytis (dir.), Jason Sudeikis, Josh Gad, tt3068194=Whit Stillman (dir.), Kate Beckinsale, Chloë Sevigny, tt3799694=Shane Black (dir.), Russell Crowe, Ryan Gosling, tt3040964=Jon Favreau (dir.), Neel Sethi, Bill Murray, tt2241351=Jodie Foster (dir.), George Clooney, Julia Roberts}">X-Men: Apocalypse</a> 
</html> 
EOF; 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$links = $dom->getElementsByTagName('a'); 
foreach ($links as $link) { 
    $title = $link->getAttribute('title'); 
    echo $title; 
} 
?> 

Имейте в виду, однако, что title не держит строку JSON, но некоторые пользовательские реализации.
См. a demo on ideone.com.


Чтобы действительно получить информацию, вы можете использовать некоторые regular expressions так:

\w+=((?:(?!(?:, tt)).)+) 

Сломался к вашей проблеме, это будет:

$regex = '~\w+=((?:(?!(?:, tt)).)+)~'; 
foreach ($links as $link) { 
    preg_match_all($regex, $link->getAttribute('title'), $actors); 
    print_r($actors); 
} 

Смотреть демо для этого on ideone.com как Что ж.

+0

Вы эхом отзывали '$ title' ?? –

+0

Спасибо за вашу помощь. Но в моем случае его не работает http://phpfiddle.org/main/code/dvj5-zf0q –

+0

@hemnathmouli: см. Обновленный ответ. – Jan

Смежные вопросы