PHP DOM:使用 DOM 获取属性



我正在使用PHPDocumentDOMXPath。我正在尝试获取带有 json 类型值的属性。但我没有得到确切的值。我可以很好地获得其他属性,但不能获得这个。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>

如果我使用echo $dom->getAttribute("href");则输出URL
如果我使用echo $dom->getAttribute("title");则输出Bryan Singer (dir.), James McAvoy, Michael Fassbender

我无法获得确切的属性值。

编辑链接 phpfiddle.org/main/code/dvj5-zf0q

谁能帮忙??我是PHPDOM的新手。提前致谢

获取 title 属性:

<?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 字符串,而是一些自定义实现。
查看有关 ideone.com 的演示


要实际获取信息,您可以使用一些正则表达式,如下所示:
w+=((?:(?!(?:, tt)).)+)

细分到您的问题,这将是:

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

ideone.com 上也可以看到这个演示。

最新更新