兰色精灵 发表于 2015-2-4 00:29:30

PHP网页编程之利用PHP 5.0 轻松解析XML文档(1)

HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。xml   用sax体例的时分,要本人构建3个函数,并且要直接用这三的函数来前往数据, 请求较强的逻辑。 在处置分歧布局的xml的时分, 还要从头停止机关这三个函数,费事!

  用dom体例,却是好些,然而他把每一个节点都看做是一个node,操作起来要写很多多少的代码, 费事!

  网上有很多多少的开源的xml解析的类库, 之前看过几个,然而心里老是感觉不扎实,感到老是跟在他人的屁股前面.

  这几天在弄java, 挺累的,所以决意换换脑壳,写点php代码,为了避免今后xml解析进程再令我犯难,就花了一天的工夫写了上面一个xml解析的类,因而就有了上面的器材。

  完成体例是经由过程包装"sax体例的解析了局"来完成的. 总的来讲,关于我团体来讲挺适用的,功能也还可以,根基上可以完成大多半的处置请求。

  功效:

  1、 对根基的xml文件的节点停止 查询 / 添加 / 修正 / 删除 任务.

  2、导出xml文件的一切数据到一个数组外面.

  3、全部设计采取了oo体例,在操作了局集的时分, 利用办法相似于dom

  弱点:

  1、 每一个节点最好都带有一个id(看前面的例子), 每一个“节点名字”=“节点的标签_节点的id”,假如这个id值没有设置,法式将主动给他发生一个id,这个id就是这个节点在他的下级节点中的地位编号,从0入手下手。

   2、 查询某个节点的时分可以经由过程用“|”符号毗连“节点名字”来停止。这些“节点名字”都是按按次写好的下级节点的名字。

  利用申明:

  运转上面的例子,在履行了局页面上可以看到函数的利用申明

  代码是经由过程php5来完成的,在php4中没法正常运转。

  因为方才写完,所以没有收拾整顿文档,上面的例子演示的只是一局部的功效,代码不是很难,如果想晓得更多的功效,可以研讨研讨源代码。

  目次布局:
test.php test.xml xml / SimpleDocumentBase.php xml / SimpleDocumentNode.php xml / SimpleDocumentRoot.php xml / SimpleDocumentParser.php  文件:test.xml

<?xml version="1.0" encoding="GB2312"?>
<shop>
<name>华联</name>
<address>北京长安街-9999号</address>
<desc>连锁超市</desc>
<cat id="food">
<goods id="food11">
<name>food11</name>
<price>12.90</price>
</goods>
<goods id="food12">
<name>food12</name>
<price>22.10</price>
<desc creator="hahawen">好器材保举</desc>
</goods>
</cat>
<cat>
<goods id="tel21">
<name>tel21</name>
<price>1290</price>
</goods>
</cat>
<cat id="coat">
<goods id="coat31">
<name>coat31</name>
<price>112</price>
</goods>
<goods id="coat32">
<name>coat32</name>
<price>45</price>
</goods>
</cat>
<special id="hot">
<goods>
<name>hot41</name>
<price>99</price>
</goods>
</special>
</shop>
   文件:test.php

<?php require_once "xml/SimpleDocumentParser.php";
require_once "xml/SimpleDocumentBase.php";
require_once "xml/SimpleDocumentRoot.php";
require_once "xml/SimpleDocumentNode.php";
$test = new SimpleDocumentParser();
$test->parse("test.xml");
$dom = $test->getSimpleDocument();
echo "<pre>";
echo "<hr><font color=red>";
echo "上面是经由过程函数getSaveData()前往的全部xml数据的数组";
echo "</font><hr>";
print_r($dom->getSaveData());
echo "<hr><font color=red>";
echo "上面是经由过程setValue()函数,给给根节点添加信息,添加后显示出了局xml文件的内容";
echo "</font><hr>";
$dom->setValue("telphone", "123456789");
echo htmlspecialchars($dom->getSaveXml());
echo "<hr><font color=red>";
echo "上面是经由过程getNode()函数,前往某一个分类下的一切商品的信息";
echo "</font><hr>";
$obj = $dom->getNode("cat_food");
$nodeList = $obj->getNode();
foreach($nodeList as $node){
$data = $node->getValue();
echo "<font color=red>商品名:".$data."</font><br>";
print_R($data);
print_R($node->getAttribute());
}
echo "<hr><font color=red>";
echo "上面是经由过程findNodeByPath()函数,前往某一商品的信息";
echo "</font><hr>";
$obj = $dom->findNodeByPath("cat_food|goods_food11");
if(!is_object($obj)){
echo "该商品不存在";
}else{
$data = $obj->getValue();
echo "<font color=red>商品名:".$data."</font><br>";
print_R($data);
print_R($obj->getAttribute());
}
echo "<hr><font color=red>";
echo "上面是经由过程setValue()函数,给商品\"food11\"添加属性, 然后显示添加后的了局";
echo "</font><hr>";
$obj = $dom->findNodeByPath("cat_food|goods_food11");
$obj->setValue("leaveword", array("value"=>"这个商品不错",
"attrs"=>array("author"=>"hahawen", "date"=>date('Y-m-d'))));
echo htmlspecialchars($dom->getSaveXml());
echo "<hr><font color=red>";
echo "上面是经由过程removeValue()/removeAttribute()函数,
给商品\"food11\"改动和删除属性, 然后显示操作后的了局";
echo "</font><hr>";
$obj = $dom->findNodeByPath("cat_food|goods_food12");
$obj->setValue("name", "new food12");
$obj->removeValue("desc");
echo htmlspecialchars($dom->getSaveXml());
echo "<hr><font color=red>";
echo "上面是经由过程createNode()函数,添加商品, 然后显示添加后的了局";
echo "</font><hr>";
$obj = $dom->findNodeByPath("cat_food");
$newObj = $obj->createNode("goods", array("id"=>"food13"));
$newObj->setValue("name", "food13");
$newObj->setValue("price", 100);
echo htmlspecialchars($dom->getSaveXml());
echo "<hr><font color=red>";
echo "上面是经由过程removeNode()函数,删除商品, 然后显示删除后的了局";
echo "</font><hr>";
$obj = $dom->findNodeByPath("cat_food");
$obj->removeNode("goods_food12");
echo htmlspecialchars($dom->getSaveXml());
?>
PHP和HTML混合编程应该不成问题,在这期间,你完全可以让PHP给你算算 一加一等于几,然后在浏览器输出,不要觉得幼稚,这的确是跟阿波罗登月一样,你打的是一小段代码,但是对于你的编程之路,可是迈出了一大步啊!兴奋吧?但是不得不再给你泼点冷水,您还是菜鸟一个。

再见西城 发表于 2015-2-4 13:13:44

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

谁可相欹 发表于 2015-2-7 02:26:27

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

小魔女 发表于 2015-2-19 21:02:06

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

admin 发表于 2015-2-27 22:52:53

爱上php,他也会爱上你。

深爱那片海 发表于 2015-3-1 18:54:10

因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax

因胸联盟 发表于 2015-3-7 14:45:43

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

爱飞 发表于 2015-3-15 07:31:56

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

蒙在股里 发表于 2015-3-21 20:41:41

爱上php,他也会爱上你。

再现理想 发表于 2015-3-27 00:09:46

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

简单生活 发表于 2015-3-28 23:59:35

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。

柔情似水 发表于 2015-4-1 03:34:51

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

活着的死人 发表于 2015-4-11 18:08:47

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

金色的骷髅 发表于 2015-4-15 21:38:23

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

若相依 发表于 2015-4-16 00:13:01

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

冷月葬花魂 发表于 2015-4-16 15:12:53

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

兰色精灵 发表于 2015-4-21 16:29:48

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

乐观 发表于 2015-4-30 03:45:23

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

不帅 发表于 2015-5-8 01:35:38

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
页: [1]
查看完整版本: PHP网页编程之利用PHP 5.0 轻松解析XML文档(1)