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('''');这个东西。
|
|