配色: 字号:
php xmlreader simplexml DOMDocument等读取xml的例子
2016-08-17 | 阅:  转:  |  分享 
  
phpxmlreadersimplexmlDOMDocument等读取xml的例子

要处理XML文件,有两种传统的处理思路:SAX和DOM。SAX基于事件触发机制,对XML文件进行一次扫描,完成要进行的处理;DOM则将整个XML文件构造为一棵DOM树,通过对DOM树的遍历完成处理。这两种方法各有优缺点,SAX的处理思路相对抽象,DOM的处理过程相对烦琐,都不很适合新手的入门。PHP5推出了一套新的XML处理函数,即SimpleXML。名如其实,SimpleXML本身小巧精干,只提供了少量的几个方法函数,但用它处理起XML文件功能却非常强大,操作也非常的简单。

一,什么是xml,xml有什么用途

XML(ExtensibleMarkupLanguage)即可扩展标记语言,它与HTML一样,都是SGML(StandardGeneralizedMarkupLanguage,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。XML的用途很多,可以用来存储数据,可以用来做数据交换,为很多种应用软件提示数据等等。

二,php读取xml的方法

xml源文件?

?代码如下 复制代码 ?????????张映??????28?????????tank??????28???????? 1)DOMDocument读取xml?

?代码如下 复制代码 ?load(''person.xml'');????????//读取xml文件???????$humans=$doc->getElementsByTagName("humans");????????//取得humans标签的对象数组??????foreach($humansas$human)???{???$names=$human->getElementsByTagName("name");??????????//取得name的标签的对象数组???$name=$names->item(0)->nodeValue;???????????????????????????????????????//取得node中的值,如???????$sexs=$human->getElementsByTagName("sex");???$sex=$sexs->item(0)->nodeValue;??????$olds=$human->getElementsByTagName("old");???$old=$olds->item(0)->nodeValue;??????echo"$name-$sex-$old\n";??????}????>?? 2)simplexml读取xml?

?代码如下 复制代码 name."-".$tmp->sex."-".$tmp->old."
";?????}?????>?? 3)用php正则表达式来记取数据?

?代码如下 复制代码 (.?)\<\/humans\>/s",$xml,$humans);??????//匹配最外层标签里面的内容???????foreach($humans[1]as$k=>$human)???{????preg_match_all("/\(.?)\<\/name\>/",$human,$name);????????????//匹配出名字????preg_match_all("/\(.?)\<\/sex\>/",$human,$sex);???????????????????????//匹配出性别????preg_match_all("/\(.?)\<\/old\>/",$human,$old);???????????????????????//匹配出年龄???}?????foreach($name[1]as$key=>$val){???echo$val."-".$sex[$key][1]."-".$old[$key][1]."
";???}???>?? 4)xmlreader来读取xml数据?

?代码如下 复制代码 open(''person.xml'');????????????????????????????????????????????????????//读取xml数据??$i=1;??while($reader->read()){?????????????????????????????????????????????????????????????//是否读取???if($reader->nodeType==XMLReader::TEXT){??????????????//判断node类型???if($i%3){????echo$reader->value;?????????????????????????????????????????????????????????????????//取得node的值???}else{????echo$reader->value."
";???}???$i++;???}??}???>?

? 使用DOMDocument操控XML

1.DOMDocument解析XML

?代码如下 复制代码 //创建一个DOMDocument()

$_doc=newDOMDocument();

//载入xml

$_doc->load(''test.xml'');

//取version标签

$_version=$_doc->getElementsByTagName(''version'');

echo$_version->item(2)->nodeValue;

//遍历version标签

foreach($_versionas$v){

echo$v->nodeValue;

}

2.DOMDocument生成XML

//声明xml

$_doc=newDOMDocument(''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函数或类可以有所改善,不过PHP还提供了一组更有帮助的内置对象和函数。文档对象模型(DocumentObjectModel,DOM)提供了一个树状结构,能很容易创建和处理标签。

三,小结

读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,张映.但是他们的测重点不同,前三种方法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而xmlreader呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就不想在搞xml文件出来了)。举个例子解释一下,xmlreader的设计重点是为了读data里面的namesexold的值,而读取的内容就比较麻烦了。他相当于jquery中attr('''');这个东西。

献花(0)
+1
(本文系网络学习天...首藏)