2012-04-27 95 views
0

我一直在使用PHP的簡單XML函數來處理XML文件。PHP - 簡單的XML - 嵌套層次

下面的代碼工作正常,一個簡單的XML層次結構:

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

echo $xml->getName() . "<br />"; 

foreach($xml->children() as $child) 
{ 
    echo $child->getName() . ": " . $child . "<br />"; 
} 

這是假設XML文檔的結構如下:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

但是,如果我有一個更復雜的結構在我的XML文檔中 - 內容不會被輸出。更復雜的XML示例如下所示:

<note> 
    <noteproperties> 
     <notetype> 
      TEST 
     </notetype> 
    </noteproperties> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

我需要處理具有無限深度的XML文件 - 任何人都可以提出一種方法嗎?

回答

1

那是因爲你需要去另一個層面下來<noteproperties>

檢查了這一點,例如,從SimpleXMLElement::children

$xml = new SimpleXMLElement(
'<person> 
    <child role="son"> 
     <child role="daughter"/> 
    </child> 
    <child role="daughter"> 
     <child role="son"> 
      <child role="son"/> 
     </child> 
    </child> 
</person>'); 

foreach ($xml->children() as $second_gen) { 
    echo ' The person begot a ' . $second_gen['role']; 

    foreach ($second_gen->children() as $third_gen) { 
     echo ' who begot a ' . $third_gen['role'] . ';'; 

     foreach ($third_gen->children() as $fourth_gen) { 
      echo ' and that ' . $third_gen['role'] . 
       ' begot a ' . $fourth_gen['role']; 
     } 
    } 
}