使用简单的html DOM来提取id

时间:2013-12-11 18:56:45

标签: php html dom

我正在使用简单的html dom来提取用户梦幻足球队。我要做的是在下面的源代码中获取每个玩家的“id”号码。例如,在下面的div中,“id”是121。

<div id="ismGraphical1" class='ismPitchElement  {"coptr": null, "played": 0, "pos": 1,           "can_sub": 1, "ep_this": 4.5, "event_points": 2, "id": 121, "sub": 0, "m": 1, "copnr":   null, "is_captain": false, "team": 6, "is_vice_captain": false, "type": 1, "ep_next": 4.5} '>

下面的代码返回整个div,但我只想获取id。我尝试过使用嵌套的for循环,但它不起作用。我认为它与div中的数组有关。但不知道从哪里开始。如果有人能指出我的正确指示,我将不胜感激

$html = new simple_html_dom($result);
foreach($html->find('div.ismPitchElement') as $pitchview)
echo $pitchview;

2 个答案:

答案 0 :(得分:1)

如果你仍然想使用simplehtmldom lib那么多。

foreach ($html->find('[class^=ismPitchElement]') as $el) {
        print json_decode(ltrim($el->{'class'}, "ismPitchElement"))->{'id'};
    }

答案 1 :(得分:0)

不需要外部库。您可以使用DOMXPath,这些类是PHP核心的一部分:

$result = <<<EOF
<div id="ismGraphical1" class='ismPitchElement  {"coptr": null, "played": 0, "pos": 1,           "can_sub": 1, "ep_this": 4.5, "event_points": 2, "id": 121, "sub": 0, "m": 1, "copnr":   null, "is_captain": false, "team": 6, "is_vice_captain": false, "type": 1, "ep_next": 4.5} '> 
EOF;

$doc = new DOMDocument();
$doc->loadHTML($result);
$selector = new DOMXPath($doc);

foreach($selector->query('//@class[starts-with(., "ismPitchElement")]') as $classattr) {
    // remove the prefix using `ltrim()`
    $json = json_decode(ltrim($classattr->nodeValue, "ismPitchElement"));
    var_dump($json->id);
}

输出:

int(121)