xml基础学习笔记03

时间:2023-03-08 21:25:49

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

  本篇主要记录:

    35、XML节点的删除与修改

    36集、用XML制作RSS订阅源

  

 <?php

 /*
笔记:
35、XML节点的删除与修改
使用的xml文件是这样的
<?xml version='1.0' encoding='utf-8' ?>
<bookstore>
<book>
<title>路遥-平凡的世界</title>
<price>43</price>
</book>
<book>
<title>曹雪芹-红楼梦</title>
<price>93</price>
</book>
</bookstore>
*/
// 删除 首先删除 路遥-平凡的世界这本书的节点
// 1、创建DOM对象
$dom = new DOMDocument('1.0','utf-8'); // 2、载入xml文件
$dom->load('./35.xml'); // 3、查找book节点,得到book节点列表,选取 ‘路遥-平凡的世界’ 这个节点删除, 下面的是连操作
$book = $dom->getElementsByTagName('book')->item(0);
/**
* 4、查找手册:removeChild()
* public DOMNode DOMNode::removeChild ( DOMNode $oldnode )
* This functions removes a child from a list of children. 从子节点列表中删除一个子节点,
* 我们首先找到了 ‘路遥-平凡的世界’ 节点,然后用 parentNode 这个属性得到其父节点
* 调用removeChild方法删除子节点
*/
// 这里我们首先看看parentNode这个属性得到什么结果
//print_r($book->parentNode); // DOMElement Object 一个对象 // 接下来删除子节点
//$book->parentNode->removeChild($book); // 输出删除后的$dom对象
//header('content-type:text/xml');
//echo $dom->saveXML();
/**
* 可以看到删除后的xml只剩下‘红楼梦’这个book了
*/ /**
* 现在再看看修改一个节点,在提供的方法中没有专门的修改的方法,
* 但是我们可以使用 replaceChild() 方法替换(节点没法修改,只能替换)
* 而且和上面删除一样,是站在父节点的基础上替换节点的
* public DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )
*/ // 这里我们替换 ‘曹雪芹-红楼梦’ 这个title节点,还是先注释掉上面的删除操作
// 1、创建文本节点
$text = $dom->createTextNode('吴承恩-西游记');
// 2、找到要替换的$oldnode节点,也就是‘红楼梦’这个title节点
$title = $dom->getElementsByTagName('title')->item(1);
// 修改/替换 节点
$title->replaceChild($text,$title->firstChild); header('content-type:text/xml');
echo $dom->saveXML();
// 结果如图2 ?>

  图-1

    xml基础学习笔记03

  图-2

  xml基础学习笔记03

  xml 做rss订阅源

  

 <?php
/**
* 36集、用XML制作RSS订阅源
* 关于RSS 2.0 的规范,大家可以去网上找,很简单也和仔细的文档。很容易理解
*/ /** 首先编辑36.xml这个模板xml文件,如图3
* <?xml version='1.0' encoding='utf-8' ?>
* <rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/"></rss>
*/ /**
* @authors wxb (http://www.cnblogs.com/wxb0328/)
* @date 2014-10-03 22:56:22
* 动态生成RSS得类
*/ class Feed {
public $title = ''; // channel中的title,在 关于RSS 2.0 的规范 中规定是必须的 包括下面的 link和description
public $link = '';
public $description = ''; public $items = array(); // 要生成item节点的二维数组 public $template = './36.xml'; //xml模板文件
protected $dom = null; function __construct(){
$this->dom = new DOMDocument('1.0','utf-8'); // 实例化一个文档对象
$this->dom->load($this->template); // 载入模板文件
} // 封装一个创建节点的方法,如:<title>标题</title>
protected function createEle($eleName,$val) {
$text = $this->dom->createTextNode($val);
$ele = $this->dom->createElement($eleName);
$ele->appendChild($text);
return $ele;
} // 封装一个方法,用来创建item
protected function createItem($arr) {
$item = $this->dom->createElement('item');
foreach ($arr as $key => $val) {
$ele = $this->createEle($key,$val);
$item->appendChild($ele);
}
return $item;
} // 封装一个channel方法,用来创建RSS的唯一且必须的channel节点
protected function createChannel() {
$channel = $this->dom->createElement('channel');
$channel->appendChild($this->createEle('title',$this->title));
$channel->appendChild($this->createEle('link',$this->link));
$channel->appendChild($this->createEle('description',$this->description));
return $channel; } // 将子节点加入到rss节点中
protected function appendChildToRss($ele) {
$rss = $this->dom->getElementsByTagName('rss')->item(0);
$rss->appendChild($ele);
} // 封装一个addItem方法,用来把所有的书籍增加到Rss里面去
// $list 是书籍列表,是一个二维数组,
protected function addItem($list) {
foreach ($list as $key => $val) {
$item = $this->createItem($val);
$this->appendChildToRss($item); // 将item加入到rss节点中
}
} // 显示xml制作的rss源的方法
public function display() {
$channel = $this->createChannel();
$this->appendChildToRss($channel);
$item = $this->addItem($this->items);
header('content-type:text/xml');
echo $this->dom->saveXML();
}
} // 连接数据库
$conn = mysql_connect('localhost','root','root');
mysql_query('set names utf8');
mysql_query('use bookstore');
$sql = 'select b_title as title,b_desc as description,b_price as price from books order by price desc limit 5';
$res = mysql_query($sql,$conn);
$list = array();
while ($row = mysql_fetch_assoc($res)) {
$list[] = $row;
} $feed = new Feed();
$feed->title = 'xml 学习';
$feed->link = 'http://www.cnblogs.com/wxb0328/';
$feed->description = 'xml 学习笔记,点滴记录,一定会很有用';
$feed->items = $list; $feed->display(); // 如图4

  图-3

  xml基础学习笔记03

  图-4

  xml基础学习笔记03

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

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

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