PHP解析和生成xml(DOMDocument版)
上次和大家分享了SimpleXML操作xml的一些知识,但是php中除了simplexml还有DOMDocument,这次就着重来看看DOMDocument的用法,还是把生成xml和解析xml分开写
1.xml的生成
DOMDocument操作xml要比先前的simplexml要复杂一点,我觉得simplexml就想java里的dom4j,不管怎样原理都是一样的。如果把DOMDocument里的节点,属性看做是枝叶那么DOMDocument的DOMDocument就是根,节点和属性都挂载在这个对象下面。看看下面的代码就很清楚了
<?php
$doc=new DOMDocument('1.0','utf-8');
//创建根节点
$root=$doc->createElement("StudentInfo");
//创建第一个子节点
$item=$doc->createElement("Item"); $name=$doc->createElement("name","蔡依林");
$studentnum=$doc->createElement("num","2009010502");
//创建属性(phpdom可以把任何元素当做子节点)
$id=$doc->createAttribute("id");
$value=$doc->createTextNode('1');
$id->appendChild($value);
//在父节点下面加入子节点
$item->appendChild($name);
$item->appendChild($studentnum);
$item->appendChild($id); $item2=$doc->createElement("Item");
$name2=$doc->createElement("name","潘玮柏");
$studentnum2=$doc->createElement("num","2009010505");
$id2=$doc->createAttribute("id");
$value2=$doc->createTextNode('2');
$id2->appendChild($value2); $item2->appendChild($name2);
$item2->appendChild($studentnum2);
$item2->appendChild($id2); $root->appendChild($item);
$root->appendChild($item2);
//把根节点挂载在DOMDocument对象
$doc->appendChild($root);
header("Content-type: text/xml");
//在页面上输出xml
echo $doc->saveXML();
//将xml保存成文件
$doc->save("stu.xml");
?>
这段代码仔细看的话其实不复杂,可能性在id属性的那个地方会有点疑问,文本节点也必须挂载在DOMDocument下面,之后把文本节点挂载在属性下面。来看下生成的xml
其实DOMDocument是首先生成节点或属性,而xml的层级关系是最后通过addchild来体现的
2.DOMDocument解析
<?php
$doc=new DOMDocument();
//如果是解析xml字符串则使用loadXML
$doc->load('stu.xml');
//取得根节点
$root=$doc->documentElement;
//通过标记的名字取得对应的元素
$items=$root->getElementsByTagName('Item');
foreach($items as $key=>$val){
// echo count($val->attributes);
//id是第一个属性所以使用item(0),nodeValue用来取得节点的值
echo $val->attributes->item(0)->name.":".$val->attributes->item(0)->nodeValue." "; foreach($val->getElementsByTagName('name') as $key2=>$val2){
echo $val2->nodeValue." ";
}
foreach($val->getElementsByTagName('num') as $key3=>$val4){
echo $val4->nodeValue."</br>";
}
}
?>
解析的话重在理解,getElementsByTagName方法,attributes属性和item是解析xml的重点。别的都算简单,看看解析出来的东西
总的来说是比simplexml麻烦一些,但是作为程序员还能接受吧。
PHP解析和生成xml(DOMDocument版)的更多相关文章
- 使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- SAX解析和生成XML文档
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...
- maven中使用dom4j解析、生成XML的简易方法
此片文章主要写一些关于如何在maven工程中使用dom4j来解析或生成XML的建议方法,实际可使用的写法不仅限于如下所写的样例代码.此处进攻快速入手和提供思路使用. 首先配置pom.xml中的依赖的包 ...
- 使用Pull解析器生成XML文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- Javascript 解析字符串生成 XML DOM 对象。
Javascript 接收字符串生成 XML DOM 对象.实测对 Firefox .IE6 有效.可用于解析 ajax 的服务器响应结果,也可用于解析自定义字符串.1. [代码]函数 ppt模 ...
- java 解析并生成 XML
在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...
- Android 下用 Pull 解析和生成 XML
Java 中是可以用 SAX 和 DOM 解析 XML 的,虽然在 Android 下也可以用这2中方式,但是还是推荐用 Pull.Pull 使用简单,效率相对高,Android 下是集成了 Pul ...
- python 解析与生成xml
xml.etree.ElementTree模块为xml文件的提取和建立提供了简单有效的API.下文中使用ET来代表xml.etree.ElementTree模块. XML是一种内在的分层的数据形式,展 ...
- Dom4j解析、生成Xml
1以下代码未Xml的解析和生成代码 <?xml version="1.0" encoding="UTF-8"?> <users> < ...
随机推荐
- maintenance ShellScripts
1.Linux挂载Winodws共享文件夹 2.查看http的并发请求数及其TCP连接状态: 3.用tcpdump嗅探80端口的访问看看谁最高 4.统计/var/log/下文件个数 5.查看当前系统每 ...
- linux去掉svn里记住的用户名密码
去掉svn里记住的用户名密码 删除掉 c:\Documents and Settings\administrator\ApplicationData\Subversion\auth\svn.sim ...
- ubuntu14.04 Markdown编辑器推荐之Remarkable
如今已经习惯了用Markdown编辑器写博文的习惯,那么ubuntu以下有什么好用的呢?搜索中发现了这个叫Remarkable的免费Markdown编辑器.为什么推荐这个呢?说说它的特点: 实时预览 ...
- loading android
drawal/loading.xml <?xml version="1.0" encoding="utf-8"?><animated-rota ...
- 关于c语言中负数位移位操作的漫谈
近期有个朋友在程序中使用了对16进制数做负数移位(编译器是gcc),本人最次产生好奇.所以研究了一些. 对一个数做负数位移位的操作是不规范的,可是是可行的. 详细样例: char tmp = 0x10 ...
- WCF初步学习
一.理解面向服务(Service-Oriented-Architecture) 是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构.S ...
- 单例模式 GetInstance()
如何设计一个含GetInstance()函数的类 直接上代码: 头文件(MyClass.h): class CMyClass { public: CMyClass(void); ~CMyClass(v ...
- 玩转kindle paperwhite: 如何越狱,安装强大外挂软件koreader
NOTICE 1: 在更新kpvbooklet和使用最新版本的koreader(v2013.03-211)时候,会出现pdf文档无法重排的错误.亲测. 如果你是使用的最新版本koreader且出现上述 ...
- dedecms导入编辑器
<?php GetEditor("info","",450,"Diy"); ?>
- 创建以及加载模块【nodejs第四篇】
建立两个文件,文件一createModule.js ,文件二main.js createModule.js的代码,主要用于创建一个模块 /** * Created by Administrator o ...