php xml 入门学习资料


Posted in PHP onJanuary 01, 2011

起因:

今天做项目时遇到一个问题:需要动态更新主页上的图片,以示本站不是做完了就算了,是有人一直在维护。好了,需求有了,如何实现?!

我的想法如下:

图片存放位置:放在一个文件夹中;图片的类型:不能固定了,只要是图片就可以上传显示;图片名字:按原始名字有点不正规,应该重新命名一下。

显示的位置:这就需要对图片指定相应的id,这个id是固定的,要与图片一一对应。于是就有一个记录一一对应的关系文件,可以选择csv文件,选择数据库记录,最后决定选择xml,这个东西在学校一直没学懂,我一直回避使用这东西,怕麻烦。今天算是挑战一下,花了一下午时间,终于有所收获。
学习步骤:

明确目标: 1、理解xml的结构;2、如何动态建立xml文件;3、如何读取和修改xml文件

一、 xml的结构是树形结构:
这个好理解。简单写一个:

<pictures> 
<picture> 
<id>1</id> 
<name>pic 1</name> 
</picture> 
<picture> 
<id>2</id> 
<name>pic 2</name> 
</picture> 
<picture> 
<id>3</id> 
<name>pic 3</name> 
</picture> 
</pictures>

二、我使用的php创建:

1. 定义一个DOM对象: $dom = new DomDocument('1.0');

2. 添加子元素:$dom->appendChild($dom->createElement("pictures"))

 内存中的原型是:<pictures></pictures>

 继续往里边加子元素:*->appendChild($dom->createElement("picture"));

 继续加: **->appendChild($dom->createElement("id"));

 不加子元素了,加节点: ***->appendChild($dom->createNode("1"))

 上面的*代表上上一行的代码;这样一来就可以写成一行:

 $dom->appendChild($dom->createElement("pictures"))->appendChild($dom->createElement("picture"))

 ->appendChild($dom->createElement("id"))->appendChild($dom->createNode("1"));

 现在内存中应该是这样的:<pictures><picture><id>1</id></picture></pictures>

 显然里要求还远,很容易看懵的。

因此一般这么写: $pictures = $dom->appendChild($dom->createElement("pictures"));

$picture = $pictures->appendChild($dom->createElement("picture"));

$id = $picture->appendChild($dom->createElement("id"));

  $id->appendChild($dom->createNode("1"));

下面还可以接着创建name节点:

$name = $picture->appendChild($dom->createElement("name"));

 $name->appendChild($dom->createNode("pic 1"));

接下来还要接着创建picture节点:

$picture = $pictures->appendChild($dom->createElement("picture"));

其实这些麻烦的事可以写个for循环来实现。

生成xml文件:

$dom->formatOutput = true;//设置格式化输出

$dom->save("erhsh.xml");//保存xml文件

三、读取xml文件。

1、还是定义一个DOM对象;$dom->new DomDocument();

2、加载xml文件:$dom->load("erhsh.xml");

3、按照节点的名字取得节点集合:$dom->getElementByTagName("pictures");

这种方法有点麻烦,参考文件:
https://3water.com/article/25853.htm

不过有一种我喜欢的方法:simplexml_load_file("erhsh.xml");

 此方法可以把xml文件的内容转换成对象的形式,使用"->"结和"[]"很容易去的xml的内容;

但是在开发中还是遇到了一点问题:

当执行:print_r($xml->pictures);时输出的是一个 SimpleXMLElement 对象,([picture] => array([0]=>array(...)[1]=>array(...)));

再执行:print_r($xml->pictures->picture);输出的是n个分开的对象。

执行:print_r($xml->pictures->picture[0]->id);输出的还是一个对象。这就很不理解,应该是一个字符串。 最后网上说是“迭代对象”,

应该使用echo输出,print_r(), var_dump()输出不准确。参考地址:https://3water.com/article/25852.htm

当然也可以修改xml的值通过这个方法。
写的很烂,仅供本人备忘。

PHP 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
php仿discuz分页效果代码
Oct 02 PHP
linux命令之调试工具strace的深入分析
Jun 03 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
PHP生成随机密码类分享
Jun 25 PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 #PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 #PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 #PHP
php防攻击代码升级版
Dec 29 #PHP
php 传值赋值与引用赋值的区别
Dec 29 #PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 #PHP
服务器web工具 php环境下
Dec 29 #PHP
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
使用隐藏的new来创建对象
2011/03/29 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Python适配器模式代码实现解析
2019/08/02 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python 导入文件过程图解
2019/10/15 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Numpy数组的广播机制的实现
2020/11/03 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
毕业评语大全
2014/05/04 职场文书
2014年环保局工作总结
2014/12/11 职场文书
村官个人总结范文
2015/03/03 职场文书
六年级语文教学反思
2016/03/03 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
详解python的内存分配机制
2021/05/10 Python
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang