PHP创建与解析 XML 1 (36)
一.使用SimpleXML操控XML
要处理XML 文件,有两种传统的处理思路:SAX 和DOM。SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理;DOM 则将整个XML 文件构造为一棵DOM树,通过对DOM 树的遍历完成处理。这两种方法各有优缺点,SAX 的处理思路相对抽象,DOM 的处理过程相对烦琐,都不很适合新手的入门。PHP5 推出了一套新的XML 处理函数,即SimpleXML。名如其实,SimpleXML 本身小巧精干,只提供了少量的几个方法函数,但用它处理起XML 文件功能却非常强大,操作也非常的简单。
1.创建XML文件
$_xml =<<<xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<version>1.0</version>
<info>xml解析测试</info>
<user>
<name>张三</name>
<url>http://www.ss.com</url>
<author sex="男">张三</author>
</user>
<user>
<name>宿舍</name>
<url>http://www.ss.com</url>
<author sex="女">谁谁谁</author>
</user>
<user>
<name>电驴</name>
<url>http://www.ss.com</url>
<author sex="男">姓黄的</author>
</user>
</root>
xml;
$_sxe= new SimpleXMLElement($_xml); //创建对象解析xml字符串
$_sxe->asXML('test.xml'); //生成XML文件
2.载入XML文件
$_sxe= simplexml_load_file("test.xml"); //载入XML文件
var_dump($_sxe); //输出相关信息
print_r($_sxe); //输出主要信息
Reflection::export(new ReflectionClass($sxe)); //用反射查看详情
3.解析XML文件
$_sxe= simplexml_load_file("test.xml"); //载入XML文件
var_dump($_sxe); //输出相关信息
print_r($_sxe); //输出主要信息
Reflection::export(new ReflectionClass($_sxe)); //用发射查看详情
echo $_sxe->asXML();//打印整个XML
4.读出XML数据
$_sxe= simplexml_load_file("test.xml");
//读取一级节点的值,比如version标签
echo $_sxe->version;
//如果有多个,可以设置它的数字下标
echo $_sxe->version[];
//如果想要全部打印出来,可以用遍历
foreach ($_sxe->version as $_version) {
echo '['.$_version.']';
}
//访问二级节点的name
echo $_sxe->user[]->name;
//获取所有二级节点的name值
foreach ($_sxe->user as $_user) {
echo '['.$_user->name.']';
}
//获取二级节点的标签的属性
echo $_sxe->user[]->author->attributes();
5.使用XPath来获取节点
$_sxe= simplexml_load_file("test.xml");
//使用XPath获取节点信息
$_version = $_sxe->xpath('/root/version');
echo $_version[];
//遍历version
foreach ($_version as $_v) {
echo '['.$_v.']';
}
//访问二级节点
$_user = $_sxe->xpath('/root/user');
echo $_user[]->name;
//遍历二级节点
foreach ($_user as $_u) {
echo '['.$_u->name.']';
}
//访问属性
echo $_user[]->author->attributes();
二.使用DOMDocument操控XML
很多情况下,手工生成标记要求从上到下生成文档,必须保证标签都是完整的,开始和结束标签。尽管借助于一些PHP函数或类可以有所改善,不过PHP还提供了一组更有帮助的内置对象和函数。文档对象模型(Document Object Model,DOM)提供了一个树状结构,能很容易创建和处理标签。
1.DOMDocument解析XML
//创建一个DOMDocument()
$_doc = new DOMDocument();
//载入xml
$_doc->load('test.xml');
//取version标签
$_version = $_doc->getElementsByTagName('version');
echo $_version->item()->nodeValue;
//遍历version标签
foreach ($_version as $v) {
echo $v->nodeValue;
}
2.DOMDocument生成XML
//声明xml
$_doc = new DOMDocument('1.0','utf-8');
//排版格式
$_doc->formatOutput = true;
//创建一个主标签
$_root = $_doc->createElement('root');
//创建一个一级标签version
$_version = $_doc->createElement('version');
//给version标签里赋值
$_versionTextNode = $_doc->createTextNode('1.0');
//将值放入version标签里
$_version->appendChild($_versionTextNode);
//将一级标签version放入root里
$_root->appendChild($_version);
//将主标签写入xml
$_doc->appendChild($_root);
//生成xml
$_doc->save('aaa.xml');
PHP创建与解析 XML 1 (36)的更多相关文章
- 使用dom4j创建和解析xml文件
使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...
- 使用dom4j创建和解析xml
之前工作中用到了,相信写java的都会碰到xml,这里写了两个方法,创建和解析xml,废话不多说,直接上代码 package xml; import java.io.File; import java ...
- (转)Android 创建与解析XML—— Dom4j方式 .
转:http://blog.csdn.net/ithomer/article/details/7521605 1.Dom4j概述 dom4j is an easy to use, open sourc ...
- MsXml创建和解析XML示例
一.MsXml创建XML文档示例 // XmlCreationDemo.cpp #include <stdlib.h> #include <stdio.h> // 引入MSXM ...
- Java 创建过滤器 解析xml文件
今天写了一个过滤器demo,现在是解析actions.xml文件,得到action中的业务规则:不需要导入任何jar包 ActionFilter过滤器类: package accp.com.xh.ut ...
- GDataXMLNode创建和解析XML
GDataXMLNode创建xml: #import <Foundation/Foundation.h> 2 #import "GDataXMLNode.h" 3 4 ...
- iOS 用GDataXMLNode创建和解析XML
原文地址:http://blog.csdn.net/gf771115/article/details/7718403 NSError *error; // NSString *path = [[ ...
- dom4j创建和解析xml文档
DOM4J解析 特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开 ...
- PHP使用SimpleElement创建和解析xml文件
<!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml ...
随机推荐
- C#实现图片文件到数据流再到图片文件的转换
//----引入必要的命名空间using System.IO;using System.Drawing.Imaging; //----代码部分----// private byte[] photo;/ ...
- FireMoneky 画图 Point 赋值
VCL 的 Canvas.Pen 对应FMX: Canvas.Stroke;VCL到 Canvas.Brush 对应FMX: Canvas.Fill. TCircle 圆形控件 Inkscape 0. ...
- 少走弯路,给Java 1~5 年程序员的建议
参考:https://www.jianshu.com/p/5681a1f0aad6 今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍.这一部分的内 ...
- 决策树与树集成模型(bootstrap, 决策树(信息熵,信息增益, 信息增益率, 基尼系数),回归树, Bagging, 随机森林, Boosting, Adaboost, GBDT, XGboost)
1.bootstrap 在原始数据的范围内作有放回的再抽样M个, 样本容量仍为n,原始数据中每个观察单位每次被抽到的概率相等, 为1/n , 所得样本称为Bootstrap样本.于是可得到参数θ的 ...
- js阻止冒泡和默认事件(默认行为)详解- jquery DefaultPrevented 函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...
- python 发送带附件的 邮件
from email.MIMETextimportMIMETextfrom email.MIMEMultipartimportMIMEMultipartimport smtplib mail_host ...
- 27.Remove Element(Array)
Given an array and a value, remove all instances of that value in place and return the new length. T ...
- Spring分配置文件开发
---------------------siwuxie095 Spring 分配置文件开发 Spring 分配置文件开 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- DataStage 错误集(持续更新)
DataStage 错误集(持续更新) DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 D ...