简体   繁体   中英

How to delete and edit specific xml node using PHP?

I am practicing on XML and PHP. I can not find out how to delete the whole xml node. Here is my XML:

<?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>

And here is the code of two function which I am having problem, delete() and edit()

<?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'; 
}   

For the delete_channel(), nothing is deleted when I run that function. I want each time I use that function, one in xml file ll be deleted.

delete a <channel> with 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);

see it working: https://eval.in/37084

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM