php程序语言开发操作XML文件

简介
如今的应用程序开发环境很难忽视 XML 的重要性。如果原来从未在 PHP 中处理过 XML,或者没有接触 PHP5,这份关于 PHP5 新增 XML 功能的入门指南可以告诉您处理 XML 是多么简单。本系列文章分为三部分,这是第一部分,主要介绍了能够快速入门的 API,通过例子说明对于简单的、可预测的和相对较小的 XML 文档,使用 SimpleXML,在必要的时候结合 DOM,是一种理想的办法。这些恰恰是 Ajax 应用程序中所传递的那些文档,比如提交表单的内容或者 Web 服务应用程序编程接口(API)如 weather.com 的响应。

关于 PHP
超文本预处理器(PHP)是一种跨平台的脚本语言,用于编写动态网页和服务器端应用程序软件。最初被称为 Personal Home Page/Form Interpreter (PHP/FI),后来在 Suraski 和 Gutmans 的手中获得了新生,这两个人在 1998 年 6 月推出了 PHP3。他们的公司 Zend Technologies 仍然控制着 PHP 的发展。
PHP5 于 2004 年 7 月发布,以 Zend Engine II 为基础,提供了很多新特性,其中包括:
对面向对象编程的全新支持
更好地支持 MySQL
更好地支持 XML,这正是我们所关心的
PHP5 和 XML
虽然 PHP 在以前的版本中就提供了 XML 支持,但是随着 PHP5 的出现这种支持大大强化了。由于 PHP4 对 XML 的支持比较有限,比如默认情况下只提供基于 SAX 的解析器、PHP4 DOM 没有实现 W3C 标准,对于 PHP5,可以说 PHP XML 开发人员是重新发明了轮子,符合常用的标准。
PHP5 新增 XML 特性
PHP5 包括彻底重新编写的和新增加的扩展,如 SAX 解析器、DOM、SimpleXML、XMLReader、XMLWriter 和 XSLT 处理程序。所有这些扩展都以 libxml2 为基础。
除了自 PHP4 改进的 SAX 支持以外,PHP5 还同时支持符合 W3C 标准的 DOM 和 SimpleXML 扩展。默认情况下同时支持 SAX、DOM 和 SimpleXML。如果熟悉其他语言中的 DOM,使用 PHP 实现类似的功能会更简单。

使用 DOM
DOM 是在浏览器中使用的、用 JavaScript 操作的 W3C DOM 规范。方法都是一样的,因此可以使用熟悉的编码技术。清单 2 示范了使用 DOM 创建 XML 字符串和 XML 文档并设置格式以便查看。

清单 2
[code]
$books = $dom->appendChild($dom->createElement('books'));

//add element to
$book = $books->appendChild($dom->createElement('book'));

//add element to <book><br /> $title = $book->appendChild($dom->createElement('title'));</p> <p> //add <title> text node element to <title><br /> $title->appendChild($dom->createTextNode('Great American<br /> Novel'));</p> <p> //generate xml<br /> $dom->formatOutput = true; // set the formatOutput attribute of<br /> domDocument to true<br /> // save XML as string or file<br /> $test1 = $dom->saveXML(); // put string in test1<br /> $dom -> save('test1.xml'); // save as file<br /> ?>[/code]</p> <p>清单 5 中的函数将 DOM 文档中的节点转化成 SimpleXML 节点。然后可以作为真正的 SimpleXML 元素来使用这个新的对象。如果出现错误则返回 FLASE。</p> <p>清单 5. 互操作性,第 2 部分 —— SimpleXML 导入 DOM<br /> [code]<?php $dom = new domDocument; $dom->loadXML('<books><book><title>Great American<br /> Novel');
if (!$dom) {
echo 'Error while parsing the document';
exit;
}

$s = simplexml_import_dom($dom);

echo $s->book[0]->title; // Great American Novel
?>[/code]

清单6 详细的XML操作 读取-删除 节点–增加节点-保存XML文件
[code]
$xmlpath='config.xml';
$xmlstr=file_get_contents($xmlpath);//读取
$xml = new SimpleXMLElement($xmlstr);//调用simplexml类
unset($xml->window->item);//删除节点

foreach($goods_list['goods'] as $key => $goodsitem){
$gooditem=$xml ->window->addChild('item');//增加节点
$goodinfo=$gooditem->addChild('info');
$goodinfo->addChild('tile',ecs_iconv(EC_CHARSET,'UTF8',$goodsitem['goods_name']));
$goodinfo->addChild('pay',ecs_iconv(EC_CHARSET,'UTF8',price_format($goodsitem['shop_price'])));

$goodinfo->addChild('about',ecs_iconv(EC_CHARSET,'UTF8','产品详情,定制计价'));
$goodinfo->addChild('link','http://localhost/goods.php?id='.$goodsitem['goods_id']);

$gooditem->addChild('view',ecs_iconv(EC_CHARSET,'UTF8',basename($goodsitem['diy_view_pic'])));
$goodpic=$gooditem->addChild('pic');
$goodpiczi=$goodpic->addChild('zoomin');
$goodpiczi->addChild('openURL',ecs_iconv(EC_CHARSET,'UTF8',basename($goodsitem['diy_zin_opic'])));
$goodpiczi->addChild('closeURL',ecs_iconv(EC_CHARSET,'UTF8',basename($goodsitem['diy_zin_cpic'])));
$goodpiczout=$goodpic->addChild('zoomout');
$goodpiczout->addChild('openURL',ecs_iconv(EC_CHARSET,'UTF8',basename($goodsitem['diy_zout_opic'])));
$goodpiczout->addChild('closeURL',ecs_iconv(EC_CHARSET,'UTF8',basename($goodsitem['diy_zout_cpic'])));
}
$xml->asXML($xmlpath);//保存XML文件
[/code]

Apache和Subversion集成安装与配置

因为工作需要,要架设一个Subversion和Apache一起工作的源码管理器.以便协同工作.于是网上找了一些资料,在找资料的过程中,也走了一些弯路,于是自己整理了一下安装的过程和一些注意的事项,希望能对大家有些帮助.
我这里用的IDE是netbeans6.0,其实用什么IDE都无所谓,只是netbeans一直是我喜欢的IDE,所以顺便向大家推荐一下.呵呵.
好了,言归正传吧,要准备的东西如下:
1,apache_2.0.63-win32-x86-no_ssl.msi
下载:http://apache.mirror.phpchina.com/httpd/binaries/win32/apache_2.0.63-win32-x86-no_ssl.msi
2,svn-1.4.5-setup.exe
下载地址:http://subversion.tigris.org/files/documents/15/39559/svn-1.4.5-setup.exe
当然,你也可以选择安装TortoiseSVN.但是我没有装,因为我的源码管理都是用netbeans完成的.

好了,准备的两个软件都下载下来以后,就可以开始安装了.
首先安装apache,一般来说直接点下一步就可以了,在设置domain以及host的时候,设置为localhost就可以了,Email你可以填你自己的Email,也可以随便填一个.安装apache要注意的是,你的电脑上80端口不能被占用,否则你的http服务是启动不起来的,我就遇到过这事,因为我用了skype,它在本机上打开了80和443端口来监听,搞得我一开始装不好,总是启动不起来,后来才发现是skype占用了80端口,于是把skype的设置改了以后,重装apache才成功.装好apache以后,这个时候,它已经在运行了,你可以在浏览器的地址栏输入http://localhost看看,是否安装成功,如果安装成功的话,这个时候浏览器里面应该是可以看到一个页面的.
然后,再安装svn-1.4.5-setup.exe,也很简单,一步一步点下步就可以了,在安装的过程中,它会默认选中一些选项,其中就有一个是是否对apache的HTTP服务器提供支持的选项,这个默认是勾上的,不要去反选它,其它的你可以反选掉.然后svn就宣布安装成功了.你可以到CMD下面去试一下svn这个命令,如果有输出,则说明安装成功了,如果提示svn 不是内部或外部命令,也不是可运行的程序或批处理文件。那就说明没有装好.或者没有把这个命令加入到path中,所以最好的办法是到svn的安装目录下的bin里面去看一下.
两者都装好了以后,就开始配置,当然,配置也是最重要的.
首先要建立一个数据仓库,我们假设建在E盘,数据仓库最好不要建在C盘,因为C盘重装系统以后就格了.我们先在E盘下面建立一个目录叫svnroot,然后在svnroot下面再建立一个我们专门放我们工程的目录,比如叫MyProject.于是我们在E盘下面就有了这个一个文件夹:E:svnrootMyProject,然后我们用svnadmin的命令,使这个文件夹变成我们的数据仓库,命令如下:
svnadmin create E:svnrootMyProject
如果运行成功的话,什么也没有输出,这个时候,我们再来到MyProject文件夹下面,我们会发现多了几个文件夹和文件,我们打开conf文件夹,然后再打开svnserve.conf文件,找到如下行# password-db = passwd,然后把它前面的#去掉,表示MyProject是需要密码验证的.但是我们密码设在哪里呢,这个时候我们再打开conf文件夹下面的passwd文件,用文本编辑器打开,在[users]下面加上我们需要启动的人员的用户和密码,比如
[users]
hadeslee=hadeslee1234
tom=123456
这个的话,我们就启动了两个用户,一个叫hadeslee,密码是hadeslee1234,一个叫tom,密码是123456.然后我们保存passwd文件.然后,我们再建一个文件,叫access.auth,这个文件是设置访问权限的,里面内容如下:
[MyProject:/]
hadeslee = rw
[MyProject:/module1]
tom=rw
hadeslee=rw
这表示,MyProject下面的所有子目录hadeslee都是有权限读写的,但是tom只有权限读写此项目下面的module1目录,这个各自的访问权限就分的更细致了.有关于MyProject文件夹下面的设置,我们就告一段落了,我们现在开始设置apache,使它能和subvertion一起工作.

首先来到Subersion的安装目录,进入它的bin目录,我们会发现如下两个文件:
mod_authz_svn.so
mod_dav_svn.so
我们把这两个文件复制一下,粘帖到apache的安装目录下的modules文件中,然后我们再打开apache安装目录下的conf文件夹,打开httpd.conf文件.增加如下两行:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
注意,由于dav_svn需要dav_module的支持,所以要确保下面这一行没有被注释,并且保证在dav_svn之前加载:
LoadModule dav_module modules/mod_dav.so
然后模块的设置就完成了,下面我们要设置SVN的目录,以使我们的apache能知道访问不同的URL的时候,它去哪里寻找这个URL所对应的SVN目录.
在httpd.conf文件中,增加如下内容:

DAV svn
SVNPath E:/svnroot/MyProject

AuthzSVNAccessFile E:/svnroot/MyProject/conf/access.auth
Satisfy Any
Require valid-user

AuthType Basic
AuthName "Subversion repositories"
AuthUserFile E:/svnroot/MyProject/conf/users.auth
Require valid-user

添加完上面这些,我们会发现access.auth是我们刚才新建的,可是users.auth我们并没有新建啊.怎么就把它加进去了.不要急,现在我们就来生成users.auth文件.

进入apache的安装目录的bin文件夹,输入如下命令:

D:Program FilesApache GroupApache2bin>htpasswd -cb users.auth hadeslee hadeslee1234
Automatically using MD5 format.
Adding password for user hadeslee

D:Program FilesApache GroupApache2bin>

我们就会发现在bin目录生成了users.auth,我们可以看到,hadeslee用户名已经被添加进去了,密码是用MD5加密过的.然后我们还要增加用户呢,可以用如下方法:
D:Program FilesApache GroupApache2bin>htpasswd -b users.auth tom 123456
Automatically using MD5 format.
Adding password for user tom

D:Program FilesApache GroupApache2bin>

只是在生成密码的时候,小了一个c的参数,因为c表示重新生成一个这样的文件,我们第一次的时候是要加的,后面我们要添加用户的时候,就不用这个c了.然后打开users.auth,会发现两个用户都已经在里面了,这个时候,我们把users.auth移到E:/svnroot/MyProject/conf/里面去,使我们上面的设置生效.

这个时候,我们的设置就完成了.可以在浏览器里面输入http://localhost/svn/MyProject试试看.

如果以后我们还要加入其它的项目呢,可以有两点解决方式
1,把以后的项目也导入到我们的MyProject的仓库中,这个的话,就不用改什么配置了
2,新建一个数据仓库,然后只要按上面的步骤,把新的设置放到httpd.conf里面就可以了.
当然,验证文件,访问权限文件,还有访问SVN的密码都要自己按上面的方法再设一遍.

祝大家能够设置成功:)