仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1965|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网页编程之利用PHP 5.0 轻松解析XML文档(1)

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:29:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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中没法正常运转。

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

  目次布局:
  1. test.php test.xml xml / SimpleDocumentBase.php xml / SimpleDocumentNode.php xml / SimpleDocumentRoot.php xml / SimpleDocumentParser.php
复制代码
  文件:test.xml
  1. <?xml version="1.0" encoding="GB2312"?>
  2. <shop>
  3. <name>华联</name>
  4. <address>北京长安街-9999号</address>
  5. <desc>连锁超市</desc>
  6. <cat id="food">
  7. <goods id="food11">
  8. <name>food11</name>
  9. <price>12.90</price>
  10. </goods>
  11. <goods id="food12">
  12. <name>food12</name>
  13. <price>22.10</price>
  14. <desc creator="hahawen">好器材保举</desc>
  15. </goods>
  16. </cat>
  17. <cat>
  18. <goods id="tel21">
  19. <name>tel21</name>
  20. <price>1290</price>
  21. </goods>
  22. </cat>
  23. <cat id="coat">
  24. <goods id="coat31">
  25. <name>coat31</name>
  26. <price>112</price>
  27. </goods>
  28. <goods id="coat32">
  29. <name>coat32</name>
  30. <price>45</price>
  31. </goods>
  32. </cat>
  33. <special id="hot">
  34. <goods>
  35. <name>hot41</name>
  36. <price>99</price>
  37. </goods>
  38. </special>
  39. </shop>
复制代码
   文件:test.php
  1. <?php require_once "xml/SimpleDocumentParser.php";
  2. require_once "xml/SimpleDocumentBase.php";
  3. require_once "xml/SimpleDocumentRoot.php";
  4. require_once "xml/SimpleDocumentNode.php";
  5. $test = new SimpleDocumentParser();
  6. $test->parse("test.xml");
  7. $dom = $test->getSimpleDocument();
  8. echo "<pre>";
  9. echo "<hr><font color=red>";
  10. echo "上面是经由过程函数getSaveData()前往的全部xml数据的数组";
  11. echo "</font><hr>";
  12. print_r($dom->getSaveData());
  13. echo "<hr><font color=red>";
  14. echo "上面是经由过程setValue()函数,给给根节点添加信息,添加后显示出了局xml文件的内容";
  15. echo "</font><hr>";
  16. $dom->setValue("telphone", "123456789");
  17. echo htmlspecialchars($dom->getSaveXml());
  18. echo "<hr><font color=red>";
  19. echo "上面是经由过程getNode()函数,前往某一个分类下的一切商品的信息";
  20. echo "</font><hr>";
  21. $obj = $dom->getNode("cat_food");
  22. $nodeList = $obj->getNode();
  23. foreach($nodeList as $node){
  24. $data = $node->getValue();
  25. echo "<font color=red>商品名:".$data[name]."</font><br>";
  26. print_R($data);
  27. print_R($node->getAttribute());
  28. }
  29. echo "<hr><font color=red>";
  30. echo "上面是经由过程findNodeByPath()函数,前往某一商品的信息";
  31. echo "</font><hr>";
  32. $obj = $dom->findNodeByPath("cat_food|goods_food11");
  33. if(!is_object($obj)){
  34. echo "该商品不存在";
  35. }else{
  36. $data = $obj->getValue();
  37. echo "<font color=red>商品名:".$data[name]."</font><br>";
  38. print_R($data);
  39. print_R($obj->getAttribute());
  40. }
  41. echo "<hr><font color=red>";
  42. echo "上面是经由过程setValue()函数,给商品\"food11\"添加属性, 然后显示添加后的了局";
  43. echo "</font><hr>";
  44. $obj = $dom->findNodeByPath("cat_food|goods_food11");
  45. $obj->setValue("leaveword", array("value"=>"这个商品不错",
  46. "attrs"=>array("author"=>"hahawen", "date"=>date('Y-m-d'))));
  47. echo htmlspecialchars($dom->getSaveXml());
  48. echo "<hr><font color=red>";
  49. echo "上面是经由过程removeValue()/removeAttribute()函数,
  50. 给商品\"food11\"改动和删除属性, 然后显示操作后的了局";
  51. echo "</font><hr>";
  52. $obj = $dom->findNodeByPath("cat_food|goods_food12");
  53. $obj->setValue("name", "new food12");
  54. $obj->removeValue("desc");
  55. echo htmlspecialchars($dom->getSaveXml());
  56. echo "<hr><font color=red>";
  57. echo "上面是经由过程createNode()函数,添加商品, 然后显示添加后的了局";
  58. echo "</font><hr>";
  59. $obj = $dom->findNodeByPath("cat_food");
  60. $newObj = $obj->createNode("goods", array("id"=>"food13"));
  61. $newObj->setValue("name", "food13");
  62. $newObj->setValue("price", 100);
  63. echo htmlspecialchars($dom->getSaveXml());
  64. echo "<hr><font color=red>";
  65. echo "上面是经由过程removeNode()函数,删除商品, 然后显示删除后的了局";
  66. echo "</font><hr>";
  67. $obj = $dom->findNodeByPath("cat_food");
  68. $obj->removeNode("goods_food12");
  69. echo htmlspecialchars($dom->getSaveXml());
  70. ?>
复制代码
  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 该用户已被删除
5#
发表于 2015-2-27 22:52:53 | 只看该作者
爱上php,他也会爱上你。
深爱那片海 该用户已被删除
6#
发表于 2015-3-1 18:54:10 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
因胸联盟 该用户已被删除
7#
发表于 2015-3-7 14:45:43 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
爱飞 该用户已被删除
8#
发表于 2015-3-15 07:31:56 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
蒙在股里 该用户已被删除
9#
发表于 2015-3-21 20:41:41 | 只看该作者
爱上php,他也会爱上你。
再现理想 该用户已被删除
10#
发表于 2015-3-27 00:09:46 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
简单生活 该用户已被删除
11#
发表于 2015-3-28 23:59:35 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
柔情似水 该用户已被删除
12#
发表于 2015-4-1 03:34:51 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
活着的死人 该用户已被删除
13#
发表于 2015-4-11 18:08:47 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
金色的骷髅 该用户已被删除
14#
发表于 2015-4-15 21:38:23 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
若相依 该用户已被删除
15#
发表于 2015-4-16 00:13:01 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
冷月葬花魂 该用户已被删除
16#
发表于 2015-4-16 15:12:53 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
兰色精灵 该用户已被删除
17#
 楼主| 发表于 2015-4-21 16:29:48 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
乐观 该用户已被删除
18#
发表于 2015-4-30 03:45:23 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
不帅 该用户已被删除
19#
发表于 2015-5-8 01:35:38 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 13:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表