用PHP代替JS玩转DOM的思路及示例代码
导航页的数据都是规则的排列在DOM树当中的,用JS可以用几个循环轻松的对其进行操作,而且JS需要依赖浏览器,操作数据库很困难。其实PHP就有现成的类库对DOM树种的节点进行增删改查操作,在此做一些笔记。
这里涉及到2个类DOMDocument和DOMXPath。
其实思路比较明确,就是通过DOMDocument将一个htmlfile转换成DOM树的数据结构,再用DOMXPath的实例去搜索这个DOM树,拿到想要特定节点,接下来就可以对当前节点的子树进行遍历,得到想要的结果。
在当前目录下有一个这样一个导航的html文件"./hao.html"
现在需要得到所有<a>标签的中文内容,php代码如下:
<?php //将html/xml文件转换成DOM树 $dom=newDOMDocument(); $dom->loadHTMLFile("hao.html"); //得到所有class为fix的dl标签 //example1:foreverythingwithanid //$elements=$xpath->query("//*[@id]"); //example2:fornodedatainaselectedid //$elements=$xpath->query("/html/body/div[@id='yourTagIdHere']"); //example3:sameasabovewithwildcard //$elements=$xpath->query("*/div[@id='yourTagIdHere']"); $xpath=newDOMXPath($dom); $dls=$xpath->query('//dl[@class="fix"]'); foreach($dlsas$dl){ $spans=$dl->childNodes; foreach($spansas$span){ echotrim($span->textContent)."\t"; } echo"\n"; } ?>
输出结果如下:
注意:值得注意的一点是DOMDocument的默认编码方式是Latin,所以在处理utf编码的中文的时候,需要在<head>后面紧跟着填入
<metahttp-equiv="content-type"content="text/html;charset=utf-8">
在其他位置,或者是只写上<metacontent="charset=utf-8">都是不识别的哦