2011-01-25 44 views
0

我是一位intermeediate PHP開發人員,試圖通過XML解析我的第一個鏡頭。我瞭解基礎知識,循環遍歷節點並打印它們及其屬性。我迷失的一件事是如何在XML文檔中的標籤名稱上檢查和寫入條件?PHP SimpleXML問題...遍歷XML的每一行確定使用的標記

所以我需要做的是讀取XML文件中的每一行:

確定其開放<level>標籤與<UL> 替換確定了一個<file>標籤,並用<li>file</li> 取代它確定其一個</level>標記並用</ul>代替

級別標記具有告訴它們分開的屬性。

的XML看起來像這樣

<level dirname="1"> 
    <file>Filename1</file> 
    <file>Filename2</file> 
    <file>Filename3</file> 
    <file>Filename4</file> 
</level> 
<level dirname="2"> 
    <file>Filename1</file> 
    <file>Filename2</file> 
    <file>Filename3</file> 
    <file>Filename4</file> 
</level> 
<level dirname="3"> 
    <level dirname = "5"> 
      <file>Filename1</file> 
      <file>Filename2</file> 
      <file>Filename3</file> 
      <file>Filename4</file> 
    </level> 
</level> 

它應該結束這樣看:

<ul> 
    <li>Filename1</li> 
    <li>Filename2</li> 
    <li>Filename3</li> 
    <li>Filename4</li> 
</ul> 
<ul> 
    <li>Filename1</li> 
    <li>Filename2</li> 
    <li>Filename3</li> 
    <li>Filename4</li> 
</ul> 
<ul> 
    <ul> 
      <li>Filename1</li> 
      <li>Filename2</li> 
      <li>Filename3</li> 
      <li>Filename4</li> 
    </ul> 
</ul> 

公告嵌套<level>標籤....因爲這個我不能簡單地echo一個<ul></ul>然後循環<li>標籤....我必須採取xml文件中的每個元素,並決定用哪個標籤替換它。

任何幫助將是偉大的。

感謝

克雷格

+0

根據你在做什麼,你可能想看看XSLT。它將XML文檔轉換爲XML或HTML。不過,如果你是初學者,可能很難學習。 – 2011-01-26 11:52:04

回答

1

你需要創建一個遞歸函數。這將檢查是否有嵌套級別,如果是,它會使用相同的函數生成它們。

請注意,您需要使用(字符串)強制轉換文件節點以將其打印出來!

function printLevel(SimpleXMLElement $e){ 
    $re = ''; 
    if(!empty($e->level)){ // checking for nested levels 
     foreach($e->level as $lvl){ 
      $re .= '<ul>'.printLevel($lvl)."</ul>\n"; 
     } 
    } 

    if(!empty($e->file)){ // checking for files 
     foreach($e->file as $file){ 
      $re .= '<li>'.(string)$file."</li>\n"; 
     } 
    } 
    return $re; 
} 

$xml = new SimpleXMLElement($xmlText); 
echo printLevel($e); 

這是行得通的。但是你的XML格式不正確!添加一個覆蓋根元素並替換)>!

+0

嘿,謝謝你的快速回復...我今天無法測試這個,但生病看看上午.....是的,當然XML有根標籤等......我只是打字它給你一個想法 – Craig 2011-01-25 21:44:49