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,好让我们对那个想象中的未来充满希望和动力。
梦想还是要有的,万一实现了呢
加油、奋斗在路上的人们!
A dwarf on a giant's shoulder sees the farther of the two.
站在巨人肩上的矮子看得比巨人远。
--A dwarf on a giant's shoulders