0

我需要像这样解析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);
}

但是有了这个我只拿一件物品,所以我正在寻找正确的方法来同时获得所有物品。

4

2 回答 2

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";
}

» 参见上面的在线运行示例

于 2013-01-01T14:09:10.543 回答
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);
}

用于测试的键盘。

于 2013-01-01T14:24:59.737 回答