如果你不知道中推進類型的電影,你可以:
- 提取所有類型從XML數據
- 讓它們成爲唯一的,因爲它們可能會多次出現(可能有一種方法可以用XPath來實現;我不知道,所以我會用
array_unique
)
- 迭代這些類型,使用什麼@Mark proposed。
像這樣的事情可能會做:
$xml = simplexml_load_string($xmlData);
$typesListXml = $xml->xpath('interesting/type');
var_dump($typesListXml); // var_dump #1
if (!empty($typesListXml)) {
$typesList = array();
foreach ($typesListXml as $typeXml) {
$typesList[] = (string)$typeXml;
}
var_dump($typesList); // var_dump #2
$typesList = array_unique($typesList);
var_dump($typesList); // var_dump #3
$moviesForType = array();
foreach ($typesList as $type) {
$rawData = $xml->xpath('interesting[type="' . $type . '"]');
if (!empty($rawData)) {
foreach ($rawData as $rawMovie) {
$moviesForType[$type][] = $rawMovie->name . ' - ' . $rawMovie->character;
}
}
}
var_dump($moviesForType); // var_dump #4
// Up to you to present $moviesForType the way you want ;-)
}
使事情更容易理解,這裏的後續代碼var_dump的輸出:
的var_dump#1:
array
0 =>
object(SimpleXMLElement)[2]
string 'Movie' (length=5)
1 =>
object(SimpleXMLElement)[3]
string 'Movie' (length=5)
2 =>
object(SimpleXMLElement)[4]
string 'Book' (length=4)
的var_dump#2:
array
0 => string 'Movie' (length=5)
1 => string 'Movie' (length=5)
2 => string 'Book' (length=4)
的var_dump#3:
array
0 => string 'Movie' (length=5)
2 => string 'Book' (length=4)
的var_dump#3:
array
'Movie' =>
array
0 => string 'Casino Royale - James Bond' (length=26)
1 => string 'Bourne Identity - Jason Bourne' (length=30)
'Book' =>
array
0 => string 'Shantaram - Lindsay Ford' (length=24)
現在,它是由你來目前壽以您想要的方式提供數據;一個雙foreach循環構造<ul>
和<li>
標籤可能會做;-)
感謝馬克。我忘了提及有很多「類型」的列表,我不想爲每個列表寫xpath,有沒有辦法自動查找「類型」而不是硬編碼值(例如「電影」,「書」)? – jchimpo 2009-07-30 21:46:31
$ arrTypes = $ xml-> xpath('interesting/type');會給你所有的類型。不幸的是,它將是一個simplexml對象的數組。您需要遍歷它並將所有類型放入一個新數組,然後array_unique()新數組。 – Mark 2009-07-30 21:55:52
你能幫我解決這個問題嗎?我是一個n00b。 :(謝謝! – jchimpo 2009-07-30 21:58:26