<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="PHP操作DOMDocument和DOMXPath示例代码  代替JS玩转DOM树的思路" id="card1">
<p> 游客</p><p>
标题:PHP操作DOMDocument和DOMXPath示例代码  代替JS玩转DOM树的思路<br/>
正文:<br/>
最近有一个需求，我需要把一个导航页的数据整理好写入数据库。一个比较直观的方法是对html文件进行分析，通用的方法是用php的正则表达式来匹配。但是这样做开发和维护都很困难，代码可读性非常差。 <br/><br/>导航页的数据都是规则的排列在DOM树当中的，用JS可以用几个循环轻松的对其进行操作，而且JS需要依赖浏览器，操作数据库很困难。其实PHP就有现成的类库对DOM树种的节点进行增删改查操作，在此做一些笔记。 <br/><br/>这里涉及到2个类 DOMDocument 和 DOMXPath。 <br/><br/>其实思路比较明确，就是通过DOMDocument将一个html file转换成DOM树的数据结构，再用DOMXPath的实例去搜索这个DOM树，拿到想要特定节点，接下来就可以对当前节点的子树进行遍历，得到想要的结果。 <br/><br/>在当前目录下有一个这样一个导航的html文件 &quot;./hao.html&quot; <br/><br/>现在需要得到所有&amp;lt;a&amp;gt;标签的中文内容，php代码如下：代码如下:&amp;lt;?php <br/>//将html/xml文件转换成DOM树 <br/>$dom = new DOMDocument(); <br/>$dom-&amp;gt;loadHTMLFile(&quot;hao.html&quot;); <br/><br/>//得到所有class为fix的dl标签 <br/><br/>// example 1: for everything with an id <br/>//$elements = $xpath-&amp;gt;query(&quot;//*[@id]&quot;); <br/><br/>// example 2: for node data in a selected id <br/>//$elements = $xpath-&amp;gt;query(&quot;/html/body/div[@id='yourTagIdHere']&quot;); <br/><br/>// example 3: same as above with wildcard <br/>//$elements = $xpath-&amp;gt;query(&quot;*/div[@id='yourTagIdHere']&quot;); <br/>$xpath = new DOMXPath($dom); <br/>$dls = $xpa<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1535&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1535&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1535&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1535&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1535">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1535">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>