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 //    结果如图2
66 
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,好让我们对那个想象中的未来充满希望和动力。

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

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

posted @ 2014-10-04 01:14  虢国技酱  阅读(708)  评论(2编辑  收藏  举报