简单的PHP HTML DOM 解析器 中文手册 | PHP Simple HTML DOM Parser中文手册

目录

快速入门

Top

//从一个URL或者文件创建一个DOM对象
$html = file_get_html('http://www.google.cn/');

// 寻找所有的img标签 
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';

// 寻找所有的链接标签
foreach($html->find('a') as $element) 
       echo $element->href . '<br>';

//从字符串创建一个DOM对象
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html; // 输出: <div id="hello">foo</div><div id="world" class="bar">World</div>


// 从HTML中提取内容(不包含标签)
echo file_get_html('http://www.google.com/')->plaintext;

//从URL创建一个DOM对象
$html = file_get_html('http://slashdot.org/');

// 寻找所有的article块
foreach($html->find('div.article') as $article) {
    $item['title']     = $article->find('div.title', 0)->plaintext;
    $item['intro']    = $article->find('div.intro', 0)->plaintext;
    $item['details'] = $article->find('div.details', 0)->plaintext;
    $articles[] = $item;
}

print_r($articles);

如何创建HTML DOM 对象?

Top

//从字符串创建一个DOM对象
$html = str_get_html('<html><body>Hello!</body></html>');

//从一个URL创建一个DOM对象
$html = file_get_html('http://www.google.com/');

//从一个HTML文件创建一个DOM对象
$html = file_get_html('test.htm');

//创建一个DOM对象
$html = new simple_html_dom();

//从字符串中载入HTML
$html->load('<html><body>Hello!</body></html>');

//从URL中载入HTML 
$html->load_file('http://www.google.cn/');

//从文件中载入HTML 
$html->load_file('test.htm'); 
//输出 
echo $html;

如何查找HTML元素?

Top

// 查找所有的, 返回一个元素对象数组
$ret = $html->find('a');

//查找第N个 , 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', 0);

//查找最后一个 , 返回元素对象或者当找不到时返回null (从零开始)
$ret = $html->find('a', -1);

//通过id属性 查找所有的<div>
$ret = $html->find('div[id]');

// 查找所有属性id=foo<div>标签
$ret = $html->find('div[id=foo]'); 

//查找所有id=foo的元素
$ret = $html->find('#foo');

//查找所有class=foo的元素
$ret = $html->find('.foo');

//查找所有包含id属性的的元素
$ret = $html->find('*[id]');

//查找所有的锚与图片
$ret = $html->find('a, img');

//查找所有包含title属性的锚与图片
$ret = $html->find('a[title], img[title]');

在属性过滤器中支持如下运算符:

过滤器
描述

[属性] 匹配包含指定属性的元素.
[!属性] 匹配包含指定属性的元素.
[属性=value] 匹配等于特定值的指定属性的元素.
[属性!=value] 匹配除包含特定值的指定属性之外的元素
[属性^=value] 匹配包含特定前缀的值的指定属性的元素.
[属性$=value] 匹配包含特定后缀的值的指定属性的元素.
[属性*=value] 匹配包含特定值的指定属性的元素..
//在<ul>中查找所有的<li>后代
$es = $html->find('ul li');

//查找所有的<div>嵌套标签
$es = $html->find('div div div');

//在<table>中查找所有的class=hello的<td>后代 
$es = $html->find('table.hello td');

//在table标签中查找所有属性align=center的td
$es = $html->find(''table td[align=center]');

//查找所有的text区块
$es = $html->find('text');

//查找所有的comment (<!--...-->)区块
$es = $html->find('comment');

//在<ul>中查找所有的<li>
foreach($html->find('ul') as $ul) 
{
       foreach($ul->find('li') as $li) 
       {
             //在这里执行操作...
       }
}

//在第一个<ul>中查找第一个<li> 
$e = $html->find('ul', 0)->find('li', 0);

如何访问HTML元素的属性?

Top

// 获取属性(如果是一个空值属性(例如. checked, selected...这些属性),则返回true或者false)
$value = $e->href;

// 设置属性(如果是一个空值属性(例如. checked, selected...这些属性),则让值等于true或者false)
$e->href = 'my link';

// 删除属性,让其值为空! 
$e->href = null;

// 确定某个属性是否存在? 
if(isset($e->href)) 
        echo 'href exist!';

// 列子
$html = str_get_html("<div>foo <b>bar</b></div>"); 
$e = $html->find("div", 0);

echo $e->tag; // 返回: " div"
echo $e->outertext; // 返回: " <div>foo <b>bar</b></div>"
echo $e->innertext; // 返回: " foo <b>bar</b>"
echo $e->plaintext; // 返回: " foo bar"

属性名
用法

$e->tag Read or write the tag name of element.
$e->outertext Read or write the outer HTML text of element.
$e->innertext Read or write the inner HTML text of element.
$e->plaintext Read or write the plain text of element.
// Extract contents from HTML 
echo $html->plaintext;

// Wrap a element
$e->outertext = '<div class="wrap">' . $e->outertext . '<div>';

// Remove a element, set it's outertext as an empty string 
$e->outertext = '';

// Append a element
$e->outertext = $e->outertext . '<div>foo<div>';

// Insert a element
$e->outertext = '<div>foo<div>' . $e->outertext;

如何遍历DOM树?

Top

//如果你不是很熟悉HTML DOM,那么请点击这个链接查看更多资料...

//列子
echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id;
//或者 
echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');

你也可以使用骆驼命名法调用.
方法
描述

mixed

$e->children ( [int $index] )

Returns the Nth child object if index is set, otherwise return an array of children.
element

$e->parent ()

Returns the parent of element.
element

$e->first_child ()

Returns the first child of element, or null if not found.
element

$e->last_child ()

Returns the last child of element, or null if not found.
element

$e->next_sibling ()

Returns the next sibling of element, or null if not found.
element

$e->prev_sibling ()

Returns the previous sibling of element, or null if not found.

如何储存DOM对象中的内容?

Top

// 将DOM树中的内容储存在字符串中
$str = $html->save();

//将DOM树中的内容储存在文件中 
$html->save('result.htm');

// 将DOM树中的内容储存在字符串中 
$str = $html;

//打印输出!
echo $html; 

如何自定义解析器方法?

Top

//创建一个带有"$element"参数的函数
function my_callback($element) {
        //隐藏所有的<b>标签
        if ($element->tag=='b')
                $element->outertext = '';
}

//用它的函数名注册callback函数
$html->set_callback('my_callback');

//当输出时就会引用Callback函数
echo $html;

最新文章

  1. BW性能优化
  2. Android Mms 接收信息流程
  3. android131 360 01 闪屏页和主页面
  4. selenium自动化测试(1):环境搭建
  5. Hibernate(四)基本映射
  6. python核心编程-第三章-个人笔记
  7. BZOJ 3211 花神游历各国 (树状数组+并查集)
  8. SSAS系列&mdash;&mdash;【02】多维数据(维度对象)
  9. linux下shell命令trap
  10. centos 6.5下cmake工具的安装与配置
  11. 【G】开源的分布式部署解决方案(三) - 一期规划定稿与初步剖析
  12. 【ASP.NET MVC 学习笔记】- 09 Area的使用
  13. Sublime 远程连接 Linux服务器
  14. 多线程(2)Thread
  15. bootstrap排列顺序
  16. POJ 1661 Help Jimmy(DP/最短路)
  17. 主流浏览器 Cookie 的大小
  18. TcxGrid标题头 字体加粗
  19. 如何在Windows系统上利用Telnet协议连接Linux服务器
  20. struts2 xml配置文件配置传参数

热门文章

  1. [Win10应用开发] 如何使用Windows通知
  2. Jafka Broker代码阅读之总览
  3. jquery监听事件on写法以及简单的拖拽效果
  4. 【Raspberry Pi】修改时区
  5. 关于C# wpf DataGrid单元格双击设置单元格内容
  6. Win8 IIS 安装和部署网站问题
  7. 转载:定位ARM Hard Fault 的方法
  8. 关于vs2013中包含目录,以及库目录配置相对路径的问题
  9. src与href的异同
  10. jQuery-实现图片的放大镜显示效果