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 相关文章推荐
PHP.MVC的模板标签系统(五)
Sep 05 PHP
数据库的日期格式转换
Oct 09 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
php简单的会话类代码
Aug 08 PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
php中bind_param()函数用法分析
Mar 28 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 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
apache和PHP如何整合在一起
2015/10/12 PHP
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
js实现简单商品筛选功能
2021/02/02 Javascript
Python操作SQLite简明教程
2014/07/10 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
python求解水仙花数的方法
2015/05/11 Python
解读Python中degrees()方法的使用
2015/05/18 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
python中shell执行知识点
2020/05/06 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
法国春天百货官网:Printemps.com
2020/06/29 全球购物
.NET概念性的面试题
2012/02/29 面试题
幼儿教师自我鉴定
2013/11/02 职场文书
医学生自我鉴定范文
2013/11/08 职场文书
美发活动策划书
2014/01/14 职场文书
单位工作证明格式模板
2014/10/04 职场文书
趣味运动会开幕词
2015/01/28 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
2015年国庆节寄语
2015/08/17 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers