2012-04-12 62 views
0

我創建了一個解析XML文檔的ios應用程序。如果用戶登錄,他們的信息將被添加到xml文件中。我希望能夠刪除用戶,如果他們註銷或取消他們的登錄。從本質上講,我需要弄清楚如何刪除XML對象(一個酒保,在這種情況下),看起來像這樣:從XML刪除元素與PHP - 非正統xml

<Bars> 
    <Bar> 
     <bar_id>0</bar_id> 
     <Bartenders> 
      <Bartender> 
       <imageURL>unique URL</imageURL> 
       <shift>20:30</shift> 
      </Bartender> 
     </Bartenders> 
    </Bar> 
    <Bar> 
     <bar_id>1</bar_id> 
     <Bartenders> 
       <Bartender> 
         <imageURL>aURL</imageURL> 
         <shift>a shift</shift> 
       </Bartender> 
       <Bartender> 
          <imageURL>aURL</imageURL> 
          <shift>a shift</shift> 
       </Bartender> 
     </Bartenders> 
    </Bar> 

例如,我想刪除基於獨特IMAGEURL用戶...我也會知道bar_id。這是我到目前爲止的PHP的,但我要建議完全開放做它用不同的方式

$newimageURL = $row['imageURL']; 
    $newBar_ID = $row['Bar_ID']; 

    $xmlUrl = "Bars.xml"; // XML 
    $xmlStr = file_get_contents($xmlUrl); 
    $xml = new SimpleXMLElement($xmlStr); 
    $bartenders = $xml->xpath('//Bartenders'); 

     // something needs to happen here to remove the child 

    $xml->asXML('Bars.xml'); 

有人告訴我,我可以用這種東西:

$bartenders->removeChild($bartenders[$newBar_ID]); 

或者xpath,但我不知道如何使用唯一的imageXML獲得正確的調酒師的路徑。我知道我應該計劃/設計這個更好,但是我爲時間而苦苦掙扎,這將不得不做。

對不起我用php很糟糕... 感謝您的幫助。

回答

1

有一個在http://php.net/manual/fr/ref.simplexml.php一個非常好的腳本,運行完美

function removeNode($xml, $path, $multi='one') 
{ 
    $result = $xml->xpath($path); 

     # for wrong $path 
     if (!isset($result[0])) return false; 

     switch ($multi) { 
      case 'all': 
       $errlevel = error_reporting(E_ALL & ~E_WARNING); 
       foreach ($result as $r) unset ($r[0]); 
       error_reporting($errlevel); 
       return true; 

      case 'child': 
       unset($result[0][0]); 
       return true; 

      case 'one': 
       if (count($result[0]->children())==0 && count($result)==1) { 
        unset($result[0][0]); 
        return true; 
       } 

      default: 
        return false;    
     } 

}

請點擊鏈接以獲取更多信息

+0

中的XPath如何知道該去哪個調酒師的組至? – thebiglebowski11 2012-04-12 13:18:43

+0

'bar_id'對於每個小節都是不同的,並且'imageURL'也是獨一無二的 – Baba 2012-04-12 19:49:44