zoukankan      html  css  js  c++  java
  • 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,好让我们对那个想象中的未来充满希望和动力。

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

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

  • 相关阅读:
    SQL Server数据库损坏、检测以及简单的修复办法
    迭代法
    求两个数组的交集
    jQuery的动画处理总结
    ASP.NET MVC企业开发的基本环境
    ASP.NET WebForm 的路由
    CMStepCounter Class Refernce
    C++输入一个字符串,把其中的字符按照逆序输出的两种方法
    5.2 列出表的列
    Mac Outlook数据文件的位置
  • 原文地址:https://www.cnblogs.com/wxb0328/p/4005570.html
Copyright © 2011-2022 走看看