混淆关于SimpleXML的
问题描述:
我有一个XML文件:混淆关于SimpleXML的
<kemo>
<cities>
<area>area1</area >
<city>city1</city>
<status>Lipsum1</status>
</cities>
<cities>
<area>area1</area >
<city>city2</city>
<status>Lipsum2</status>
</cities>
<cities>
<area >area2</area >
<city>city3</city>
<status>Lipsum3</status>
</cities>
<cities>
<area >area2</area >
<city>city4</city>
<status>Lipsum4</status>
</cities>
<cities>
<area >area2</area >
<city>city5</city>
<status>Lipsum5</status>
</cities>
</kemo>
我可以走线槽这个XML与simlpeXML,但我不想重复区域名称。我想一棵树是这样的:
area1 city1
city2
area2 city3
city4
city5
与
$request_url = "xml.xml";
$xml = simplexml_load_file($request_url) or die("feed not loading");
foreach($xml->kemo as $value){
echo '<li><span>'.$value->area.' '.$value->city.'</span></li>';
}
我已经重复区域。我怎样才能防止重复的孩子?
答
这不是关于SimpleXML。我的建议是 - 将整个XML加载到数组中,然后列出它。如果您先将XML加载到数组中,则可以确保XML的列表不会像area1,area2,area1那样以错误的区域顺序被破坏。
$xml = simplexml_load_file('xml.xml') or die("feed not loading");
$data = array();
foreach($xml as $value) {
$area = (string)$value->area;
// $area needs to be a string when using as a array key
$data[$area][] = $value->city;
}
然后用$data
foreach ($data as $area_name => $cities) {
print $area_name;
foreach ($cities as $city) {
print $city;
}
}
答
的工作,你可以做这样的手工检查:
$xml = simplexml_load_file($request_url) or die("feed not loading");
foreach($xml->kemo as $value){
($value->area == $prev_area) ? $area = "" : $area = $value_area && $prev_area = $area);
echo '<li><span>'.$area.' '.$value->city.'</span></li>';
}
不知道这是否会编译,但你可能会得到的想法: )
这是一个非常优雅的解决方案:-) – Burbas 2010-07-11 18:33:45
警告:非法偏移类型 – TheNone 2010-07-11 18:46:16
@dwich:+1我可能完全没有得到他的问题。 – Sarfraz 2010-07-11 18:50:16