2013-07-08 2 views
0

Я занимаюсь XML и PHP. Я не могу узнать, как удалить весь узел xml. Вот мой XML:Как удалить и отредактировать определенный узел xml с помощью PHP?

<?xml version="1.0" encoding="UTF-8"?> 
<items> 
<playlist_name>Channel List</playlist_name> 
<category> 
<category_id>1</category_id> 
<category_title>HD</category_title> 
</category> 
<channel> 
<title>VTC HD1</title> 
<stream_url><![CDATA[http://203.162.16.22:80/lives/origin01/vtchd1.isml/vtchd1.m3u8]]></stream_url> 
<logo_30x30>vtchd1.jpg</logo_30x30> 
<category_id>1</category_id> 
</channel> 
<channel> 
<title>VTC HD2</title> 
<stream_url><![CDATA[http://203.162.16.22:80/lives/origin01/vtchd2.isml/vtchd2.m3u8]]></stream_url> 
<logo_30x30>vtchd2.jpg</logo_30x30> 
<category_id>1</category_id> 
</channel> 
</items> 

А вот код двух функций, которые у меня возникли проблемы, удаление() и редактировать()

<?php 

function delete_channel() 
{ 
    $file = "nStream.xml"; 
    $fp = fopen($file, "rb") or die("cannot open file"); 
    $str = fread($fp, filesize($file)); 

    $xml = new DOMDocument(); 
    $xml->formatOutput = true; 
    $xml->preserveWhiteSpace = false; 
    $xml->loadXML($str) or die("Error"); 

    // original 
//  echo "<xmp>OLD:\n". $xml->saveXML() ."</xmp>"; 

    // get document element 
    $root = $xml->documentElement; 
    $fnode = $root->firstChild; 

    //get a node 
    $ori = $fnode->childNodes->item(0); 

    // remove 
    $fnode->removeChild($ori); 

//  echo "<xmp>NEW:\n". $xml->saveXML() ."</xmp>"; 
} 

function edit_channel() 
{ 
    echo 'Go Edit'; 
} 

Для delete_channel(), ничего не удаляется при Я запустил эту функцию. Я хочу, чтобы каждый раз, когда я использую эту функцию, один в xml-файле будет удален.

+0

Привет г-н Ха-ха, что именно не работает? – michi

+0

Это «функция delete_channel()» и «function edit_channel()» –

+0

нормально, а что именно не работает? что вы получаете вместо этого? ошибки? будьте конкретны. – michi

ответ

0

<channel> удалить с simplexml:

$xml = simplexml_load_file($filename); 

// select the channel to be deleted by title 
$channel = $xml->xpath("//channel[title='VTC HD2']"); 

// delete it! 
unset($channel[0][0]); 

// save it 
$xml->asXML($filename); 

видеть, что это работает: https://eval.in/37084

Смежные вопросы