|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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中没法正常运转。
因为方才写完,所以没有收拾整顿文档,上面的例子演示的只是一局部的功效,代码不是很难,如果想晓得更多的功效,可以研讨研讨源代码。
目次布局: - 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[name]."</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[name]."</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给你算算 一加一等于几,然后在浏览器输出,不要觉得幼稚,这的确是跟阿波罗登月一样,你打的是一小段代码,但是对于你的编程之路,可是迈出了一大步啊!兴奋吧?但是不得不再给你泼点冷水,您还是菜鸟一个。 |
|