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 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
PHP中的Streams详细介绍
Nov 12 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
php7 安装yar 生成docker镜像
May 09 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
TP5框架简单登录功能实现方法示例
Oct 31 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
基于mysql的论坛(6)
2006/10/09 PHP
第十一节--重载
2006/11/16 PHP
PHP 一个比较完善的简单文件上传
2010/03/25 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
PHP strripos函数用法总结
2019/02/11 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
javascript中AJAX用法实例分析
2015/01/30 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
vue移动端使用canvas签名的实现
2020/01/15 Javascript
python实现图片彩色转化为素描
2019/01/15 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
详解python UDP 编程
2020/08/24 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
华为的Java面试题
2014/03/07 面试题
2014年社区学雷锋活动总结
2014/03/09 职场文书
如何写好建议书
2014/03/13 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
python 调用js的四种方式
2021/04/11 Python
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫