使用DOMDocument获取多个元素

时间:2013-01-01 14:06:46

标签: php xpath domdocument

我需要解析html,如:

<div class="item"><div class="title">title 1</div><div class="date">day 1</div></div>
<div class="item"><div class="title">title 2</div><div class="date">day 2</div></div>
<div class="item"><div class="title">title 3</div><div class="date">day 3</div></div>

其实我这样做:

$title = $xpath->query('//div[@class="title"]//text()');
foreach ($title as $title)
{
  $title = trim($title->nodeValue);
}

$date = $xpath->query('//div[@class="date"]//text()');
foreach ($date as $date)
{
  $date = trim($date->nodeValue);
}

但是这个我只拿了一个项目,所以我正在寻找合适的方法让所有项目都在同一时间。

2 个答案:

答案 0 :(得分:3)

您可能想要遍历item元素,然后查找各自的titledate文字。

$items = $xpath->query('//div[@class="item"]');
foreach ($items as $item) {
    $title = $xpath->evaluate('string(div[@class="title"])', $item);
    $date  = $xpath->evaluate('string(div[@class="date"])', $item);
    echo "$title $date\n";
}

» See the above example running online

答案 1 :(得分:1)

我真的不明白你的问题。循环按预期工作,例如,您可以在数组中累积所有标题和日期。虽然我不会再次重复使用相同的变量名称。

$titles = $xpath->query('//div[@class="title"]//text()');
foreach ($titles as $title)
{
    $all_titles[] = trim($title->nodeValue);
}

$dates = $xpath->query('//div[@class="date"]//text()');
foreach ($dates as $date)
{
    $all_dates[] = trim($date->nodeValue);
}

codepad进行测试。