首页 > 代码库 > xml基础学习笔记03

xml基础学习笔记03

  继续上篇xml学习笔记,坚持、坚持、再坚持啊、、、、

  本篇主要记录:

    35、XML节点的删除与修改

    36集、用XML制作RSS订阅源

  

 1 <?php 2  3 /* 4   笔记: 5     35、XML节点的删除与修改 6     使用的xml文件是这样的 7         <?xml version=‘1.0‘ encoding=‘utf-8‘ ?> 8         <bookstore> 9             <book>10                 <title>路遥-平凡的世界</title>11                 <price>43</price>12             </book>13             <book>14                 <title>曹雪芹-红楼梦</title>15                 <price>93</price>16             </book>17         </bookstore>18 */19 // 删除    首先删除 路遥-平凡的世界这本书的节点20 //    1、创建DOM对象21     $dom = new DOMDocument(‘1.0‘,‘utf-8‘);22 23 //    2、载入xml文件24     $dom->load(‘./35.xml‘);25 26 //    3、查找book节点,得到book节点列表,选取 ‘路遥-平凡的世界’ 这个节点删除, 下面的是连操作27     $book = $dom->getElementsByTagName(‘book‘)->item(0);28 /**29  *    4、查找手册:removeChild()30  *    public DOMNode DOMNode::removeChild ( DOMNode $oldnode )31  *    This functions removes a child from a list of children. 从子节点列表中删除一个子节点,32  *    我们首先找到了 ‘路遥-平凡的世界’ 节点,然后用 parentNode 这个属性得到其父节点33  *     调用removeChild方法删除子节点34  */35 //    这里我们首先看看parentNode这个属性得到什么结果36     //print_r($book->parentNode);                //   DOMElement Object 一个对象37     38 //    接下来删除子节点39     //$book->parentNode->removeChild($book);40 41 //    输出删除后的$dom对象42     //header(‘content-type:text/xml‘);43     //echo $dom->saveXML();44 /**45  *    可以看到删除后的xml只剩下‘红楼梦’这个book了46  */47 48 /**49  *    现在再看看修改一个节点,在提供的方法中没有专门的修改的方法,50  *    但是我们可以使用 replaceChild() 方法替换(节点没法修改,只能替换)51  *    而且和上面删除一样,是站在父节点的基础上替换节点的52  *    public DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )53  */54     55 //    这里我们替换 ‘曹雪芹-红楼梦’ 这个title节点,还是先注释掉上面的删除操作56 //    1、创建文本节点57     $text = $dom->createTextNode(‘吴承恩-西游记‘);58 //    2、找到要替换的$oldnode节点,也就是‘红楼梦’这个title节点59     $title = $dom->getElementsByTagName(‘title‘)->item(1);60 //    修改/替换 节点61     $title->replaceChild($text,$title->firstChild);62 63     header(‘content-type:text/xml‘);64     echo $dom->saveXML();65 //    结果如图266 67 68 69 70 71 ?>

  图-1

    

  图-2

  

 

  xml 做rss订阅源

  

  1 <?php  2 /**  3  * 36集、用XML制作RSS订阅源  4  * 关于RSS 2.0 的规范,大家可以去网上找,很简单也和仔细的文档。很容易理解  5  */  6   7 /** 首先编辑36.xml这个模板xml文件,如图3  8  *    <?xml version=‘1.0‘ encoding=‘utf-8‘ ?>  9  *    <rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"></rss> 10  */ 11  12 /** 13  * @authors wxb (http://www.cnblogs.com/wxb0328/) 14  * @date    2014-10-03 22:56:22 15  * 动态生成RSS得类 16  */ 17  18 class Feed { 19     public $title = ‘‘;        // channel中的title,在 关于RSS 2.0 的规范 中规定是必须的 包括下面的 link和description 20     public $link = ‘‘; 21     public $description = ‘‘; 22  23     public $items = array();    // 要生成item节点的二维数组 24  25     public $template = ‘./36.xml‘;        //xml模板文件 26     protected $dom = null; 27  28     function __construct(){ 29         $this->dom = new DOMDocument(‘1.0‘,‘utf-8‘);    // 实例化一个文档对象 30         $this->dom->load($this->template);                // 载入模板文件 31     } 32  33     // 封装一个创建节点的方法,如:<title>标题</title> 34     protected function createEle($eleName,$val) { 35         $text = $this->dom->createTextNode($val); 36         $ele = $this->dom->createElement($eleName); 37         $ele->appendChild($text); 38         return $ele; 39     } 40  41     // 封装一个方法,用来创建item 42     protected function createItem($arr) { 43         $item = $this->dom->createElement(‘item‘); 44         foreach ($arr as $key => $val) { 45             $ele = $this->createEle($key,$val); 46             $item->appendChild($ele); 47         } 48         return $item; 49     } 50  51     // 封装一个channel方法,用来创建RSS的唯一且必须的channel节点 52     protected function createChannel() { 53         $channel = $this->dom->createElement(‘channel‘); 54         $channel->appendChild($this->createEle(‘title‘,$this->title)); 55         $channel->appendChild($this->createEle(‘link‘,$this->link)); 56         $channel->appendChild($this->createEle(‘description‘,$this->description)); 57         return $channel; 58          59     } 60  61     // 将子节点加入到rss节点中 62     protected function appendChildToRss($ele) { 63         $rss = $this->dom->getElementsByTagName(‘rss‘)->item(0); 64         $rss->appendChild($ele); 65     } 66  67     // 封装一个addItem方法,用来把所有的书籍增加到Rss里面去 68     // $list 是书籍列表,是一个二维数组, 69     protected function addItem($list) { 70         foreach ($list as $key => $val) { 71             $item = $this->createItem($val); 72             $this->appendChildToRss($item);        // 将item加入到rss节点中 73         } 74     } 75  76     // 显示xml制作的rss源的方法 77     public function display() { 78         $channel = $this->createChannel(); 79         $this->appendChildToRss($channel); 80         $item = $this->addItem($this->items); 81         header(‘content-type:text/xml‘); 82         echo $this->dom->saveXML(); 83     } 84 } 85  86 // 连接数据库 87 $conn = mysql_connect(‘localhost‘,‘root‘,‘root‘); 88 mysql_query(‘set names utf8‘); 89 mysql_query(‘use bookstore‘); 90 $sql = ‘select b_title as title,b_desc as description,b_price as price from books order by price desc limit 5‘; 91 $res = mysql_query($sql,$conn); 92 $list = array(); 93 while ($row = mysql_fetch_assoc($res)) { 94     $list[] = $row; 95 } 96  97  98 $feed = new Feed(); 99 $feed->title = ‘xml 学习‘;100 $feed->link = ‘http://www.cnblogs.com/wxb0328/‘;101 $feed->description = ‘xml 学习笔记,点滴记录,一定会很有用‘;102 $feed->items = $list;103 104 $feed->display();    // 如图4

  图-3

  

  图-4

  

  这几点,学习的都有点皮了,哎!学习这种东西,一旦热情消退,还能坚持,真的很不容易。自我鼓励还是很有必要的,有时也许需要一些YY,好让我们对那个想象中的未来充满希望和动力。

  梦想还是要有的,万一实现了呢

  加油、奋斗在路上的人们!

xml基础学习笔记03