2013-01-01 117 views
0

我需要解析HTML,如:獲取多個元素與DOM文檔

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

但是有了這個,我只需要一個項目,所以我在尋找正確的方式讓所有的物品在同一時間。

回答

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

完美,謝謝你,我不知道「評估」:) – Tahola

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進行測試。