2017-02-26 9 views
0

我有一個XML文件和for-each項目,但我不知道如何獲取類別名稱和子類別名稱,也無法編輯xml。如何從XML(無陣列)獲取數據

這是我的XML文件:

<?xml version='1.0' encoding='UTF-8'?> 
<data> 
    <category name="test-cat1"> 
    <subcat name="test-subcat1"> 
     <item name="test-name1">data1</item> 
     <item name="test-name2">data2</item> 
     <item name="test-name3">data3</item> 
    </subcat> 
    <subcat name="test-subcat2"> 
     <item name="test-name4">data4</item> 
     <item name="test-name5">data5</item> 
     <item name="test-name6">data6</item> 
    </subcat> 
    </category> 
    <category name="test-cat2"> 
    <subcat name="test-subcat3"> 
     <item name="test-name7">data7</item> 
     <item name="test-name8">data8</item> 
     <item name="test-name9">data9</item> 
    </subcat> 
    <subcat name="test-subcat4"> 
     <item name="test-name10">data10</item> 
     <item name="test-name11">data11</item> 
     <item name="test-name12">data12</item> 
    </subcat> 
    </category> 
</data> 

這是我的PHP腳本:

<?php 

$xml = simplexml_load_file('test.xml'); 

    foreach($xml->xpath('//item') as $item){ 

    echo $item . '<br>'; 
    echo $item['name'] . '<br>'; 
    echo /*item category*/; 
    echo /*item sub-category*/; 
    echo "<br>"; 

    } 

?> 

,我想有這樣的結果:如果你使用XPath與

data1 
test-name1 
test-cat1 
test-subcat1 

data2 
test-name2 
test-cat1 
test-subcat1 

... 
+0

可能的重複[如何使用php解析XML文件](http://stackoverflow.com/questions/8775669/how-to-parse-xml-file-using-php) – tambre

回答

1

$item->xpath('ancestor::category')[0]['name']$item->xpath('parent::subcat')[0]['name']那麼你應該得到的值:

foreach($data->xpath('//item') as $item){ 

    echo $item . '<br>'; 
    echo $item['name'] . '<br>'; 
    echo $item->xpath('ancestor::category')[0]['name'] . '<br>'; 
    echo $item->xpath('parent::subcat')[0]['name'] . '<br>'; 
    echo "<br>"; 

    } 
+0

非常感謝! –

0

迭代通過SimpleXMLElement::children()代替:

<?php 

$xml = simplexml_load_file('test.xml'); 

foreach($xml->children() as $cat){ 
    $catName = $cat["name"]; 
    foreach($cat->children() as $subcat){ 
     $subcatName = $subcat["name"]; 
     foreach($subcat->children() as $child){ 
      echo "$child", "\n", $child["name"], "\n", $subcatName, "\n", $catName, "\n\n"; 
     } 
    } 
} 

給出了這樣的輸出:

data1 
test-name1 
test-subcat1 
test-cat1 

data2 
test-name2 
test-subcat1 
test-cat1 

data3 
test-name3 
test-subcat1 
test-cat1 

data4 
test-name4 
test-subcat2 
test-cat1 

data5 
test-name5 
test-subcat2 
test-cat1 

data6 
test-name6 
test-subcat2 
test-cat1 

data7 
test-name7 
test-subcat3 
test-cat2 

data8 
test-name8 
test-subcat3 
test-cat2 

data9 
test-name9 
test-subcat3 
test-cat2 

data10 
test-name10 
test-subcat4 
test-cat2 

data11 
test-name11 
test-subcat4 
test-cat2 

data12 
test-name12 
test-subcat4 
test-cat2 

注意"$child"用於$子轉換成它的字符串的內容。這與(string $child)$child->__toString()相同。