用PHP代替JS玩转DOM的思路及示例代码


Posted in PHP onJune 15, 2014

事情的起源比较简单,我需要把一个导航页的数据整理好写入数据库。一个比较直观的方法是对html文件进行分析,通用的方法是用php的正则表达式来匹配。但是这样做开发和维护都很困难,代码可读性非常差。

导航页的数据都是规则的排列在DOM树当中的,用JS可以用几个循环轻松的对其进行操作,而且JS需要依赖浏览器,操作数据库很困难。其实PHP就有现成的类库对DOM树种的节点进行增删改查操作,在此做一些笔记。

这里涉及到2个类 DOMDocument 和 DOMXPath。

其实思路比较明确,就是通过DOMDocument将一个html file转换成DOM树的数据结构,再用DOMXPath的实例去搜索这个DOM树,拿到想要特定节点,接下来就可以对当前节点的子树进行遍历,得到想要的结果。

在当前目录下有一个这样一个导航的html文件 "./hao.html"

现在需要得到所有<a>标签的中文内容,php代码如下:

<?php 
//将html/xml文件转换成DOM树 
$dom = new DOMDocument(); 
$dom->loadHTMLFile("hao.html"); //得到所有class为fix的dl标签 
// example 1: for everything with an id 
//$elements = $xpath->query("//*[@id]"); 
// example 2: for node data in a selected id 
//$elements = $xpath->query("/html/body/div[@id='yourTagIdHere']"); 
// example 3: same as above with wildcard 
//$elements = $xpath->query("*/div[@id='yourTagIdHere']"); 
$xpath = new DOMXPath($dom); 
$dls = $xpath->query('//dl[@class="fix"]'); 
foreach ($dls as $dl) { 
$spans = $dl->childNodes; 
foreach ($spans as $span) { 
echo trim($span->textContent)."\t"; 
} 
echo "\n"; 
} 
?>

输出结果如下:

注意:值得注意的一点是DOMDocument的默认编码方式是Latin,所以在处理utf编码的中文的时候,需要在<head>后面紧跟着填入

<meta http-equiv="content-type" content="text/html; charset=utf-8">

在其他位置,或者是只写上<meta content="charset=utf-8">都是不识别的哦
PHP 相关文章推荐
一个基于PDO的数据库操作类
Mar 24 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
基于simple_html_dom的使用小结
Jul 01 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
php以post形式发送xml的方法
Nov 04 PHP
php 删除cookie方法详解
Dec 01 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
php解析xml方法实例详解
May 12 PHP
PHP实现简单实用的分页类代码
Apr 08 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 #PHP
浅析PHP的静态成员函数效率更高的原因
Jun 13 #PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 #PHP
PHPAnalysis中文分词类详解
Jun 13 #PHP
ThinkPHP缓存方法S()概述
Jun 13 #PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 #PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 #PHP
You might like
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
php 空格,换行,跳格使用说明
2009/12/18 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
什么是Python包的循环导入
2020/09/08 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
助人为乐好少年事迹材料
2014/08/18 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
英文投诉信格式
2015/07/03 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server