Php 处理xml文件

Php 处理xml文件,php,xml,simplexml,Php,Xml,Simplexml,我有以下xml文件: row category="1" category_name="CatA" entry_id="1" entry_name="A1" row category="1" category_name="CatA" entry_id="2" entry_name="A2" row category="1" category_name="CatA" entry_id="3" entry_name="A3" row category="2" catego

我有以下xml文件:

row category="1" category_name="CatA" entry_id="1" entry_name="A1" row category="1" category_name="CatA" entry_id="2" entry_name="A2" row category="1" category_name="CatA" entry_id="3" entry_name="A3" row category="2" category_name="CatB" entry_id="4" entry_name="B1" row category="2" category_name="CatB" entry_id="5" entry_name="B2" row category="2" category_name="CatB" entry_id="6" entry_name="B3" row category="3" category_name="CatC" entry_id="7" entry_name="C1" row category="4" category_name="CatD" entry_id="8" entry_name="D1" 为此,我使用以下php xml解析器:

$ndeshjet=simplexml\u load\u文件(“xml\u file.xml”);
$new_类别=1;
foreach($ndeshjet->行作为$entry){
$category=$entry['category'];
如果($category$new\u category){
$category_name=$entry['category_name'];
echo$category_name.“
”; $new_category=$category; }否则{ $entry_name=$entry['entry_name']; echo“---.$entry\u name.”
“; } }
?>

但结果是:

----A1 ----A2 ----A3 有线电视 有线电视 有线电视 CatC CatD

提前感谢

作为替代方案,您可以首先在数组中收集所有值,并将
类别名称
作为键,将相同的键推到数组中。完成并收集后,相应地打印:

$categories=array();
//聚集在容器内
foreach($ndeshjet->行作为$entry){
$category\u name=(字符串)$entry->attributes()->category\u name;
$entry\u name=(字符串)$entry->attributes()->entry\u name;
$categories[$categories\u name][]=$entry\u name;
}
//介绍
foreach($category作为$category\u name=>$entries的类别){
echo$category_name.“
”; foreach($entries作为$entry){ 回显'-'.$entry.'
; } }

@ArtanTelkiu当然,我很高兴这有帮助
CatA
----A1
----A2
----A3
CatB
----B1
----B2
----B3
CatC
----C1
CatD
----D1
$ndeshjet=simplexml_load_file("xml_file.xml");

$new_category = 1;

foreach ($ndeshjet->row as $entry) {

      $category = $entry['category'];
        if ($category  <> $new_category){
             $category_name = $entry['category_name'];
             echo $category_name."</br>";   
             $new_category = $category;
        } else {
             $entry_name  = $entry['entry_name'];
             echo "----".$entry_name."</br>";       
        }
}
$categories = array();
// gather inside container
foreach ($ndeshjet->row as $entry) {
    $category_name = (string) $entry->attributes()->category_name;
    $entry_name = (string) $entry->attributes()->entry_name;
    $categories[$category_name][] = $entry_name;
}

// presentation
foreach($categories as $category_name => $entries) {
    echo $category_name . '<br/>';
    foreach($entries as $entry) {
        echo '----' . $entry . '<br/>';
    }
}