2010年10月9日星期六

SimpleXML php操作xml的简单入门

DOM是Document Object Model文档对象模型的缩写。根据W3C DOM规范(http://www.w3.org/DOM/),DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标准组件。

说到对xml文件的操作,简单的入门的话无非是: 读取文件,写文件,修改文件

首先说读取文件,我们可以使用两种方法,一种是dom方式,一种是php提供的SimpleXMLElement对象。

我的xml文件中的内容如下:



Great American Novel
This is a science fiction!
Science Novel


名字叫做test1.xml

$xmlstr = 'test1.xml';
//加载xml文件(load a xml file)
//$xml = simplexml_load_file($xmlstr); //这也是一种简单可行的方法

//the third parameter means the first parameter is url or not
$xml = new SimpleXMLElement($xmlstr,NULL,TRUE);
//以属性的方式读取
//echo $xml->book[0]->title;
//循环度读取元素
foreach ($xml->book as $book ){
//echo $book->plot."
";
}

//修改文本节点信息
$xml->book[0]->define = "self define!";
//插入节点
$mybook = $xml->addChild('book');
$mybook->addChild('title','Anna');
$mybook->addChild('plot','About Anna');
$mybook->addChild('define','added by me!');

echo $xml->asXML(); //输出xml文件内容
代码很清晰,不用更多解释了。下面的是使用dom对象读取的方法:

$dom = new DOMDocument('1.0');
$books = $dom->getElementsByTagName('book'); //注意这里获取的类型是DOMNodelist
$book = $books->item(0); //这里获取的类型是DOMNode
$title = $book->getElementsByTagName('title');
echo $title->item(0)->nodeValue; //输出节点信息

这里有点难理解,关键是DOMNodelist和DOMNode这两种类型。 nodelist就像一个数组,是我们用getElementsByTagName获取到的,它具有item方法,item后面可以跟上index来指明是访问那个node,有点类似与数组但是用法完全不一样。node的话,具有nodeValue这个属性,可是使用它来访问node的具体内容。 对于nodelist,一般都倾向与使用迭代来便利,用法如下:
foreach($books as $book){ //$books是nodelist类型的,$book是node类型的
//具体操作
}

读文件完成了,下面是写文件:

//创建一个dom对象
$dom = new DOMDocument('1.0');
//创建根节点
$books = $dom->appendChild($dom->createElement('books'));
//创建子节点
$book = $books->appendChild($dom->createElement('book'));
//创建子节点
$title = $book->appendChild($dom->createElement('title'));
//写入文本内容
$title->appendChild($dom->createTextNode('Great American Novel'));
//格式化输出
$dom->formatOutput = true;
//保存xml到文件
$dom -> save('test1.xml'); // save as file

最后是修改文件,其实也很简单,打开以后读取node的值,修改,然后保存就可以了。

//读取根节点
$root = $dom->getElementsByTagName('books');
//创建一个book节点
$mybook = $dom->createElement('book');
//添加到根节点
$root->item(0)->appendChild($mybook);
//创建title节点
$title = $dom->createElement('title');
//向title节点写入文本内容
$title->appendChild($dom->createTextNode('The deviche code'));
//修改文本内容
$title->nodeValue='my novel';
//添加到book节点
$mybook->appendChild($title);
//保存xml文件
$dom->save($xml_path);

修改文本的时候有两种方法,个人感觉第二种直接写nodeValue更好一些。 掌握了这三种操作,简单的xml操作基本就没有问题了。


这里有所有你想要的:
DOMNodelist讲解: http://www.phpchina.com/manual/php/function.dom-domnodelist-item.html
phpsimplexml官方帮助文档: http://us3.php.net/manual/en/book.simplexml.php

没有评论: