我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP中如何使用DOMDocument来处理HTML、XML文档

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP中如何使用DOMDocument来处理HTML、XML文档

这篇文章主要介绍了PHP中如何使用DOMDocument来处理HTML、XML文档,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

php有什么特点

1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与非主流的数据库。4、面向对象编程:PHP提供了类和对象。5、版本更新速度快。6、具有丰富的功能。7、可伸缩性。8、功能全面,包括图形处理、编码与解码、压缩文件处理、xml解析等。

解析HTML

// 解析 HTML$baidu = file_get_contents('https://www.baidu.com');$doc = new DOMDocument();@$doc->loadHTML($baidu);// 百度输出框$inputSearch = $doc->getElementById('kw');var_dump($inputSearch);// object(DOMElement)#2 //     ....echo $inputSearch->getAttribute('name'), PHP_EOL; // wd// 获取所有图片的链接$allImageLinks = [];$imgs = $doc->getElementsByTagName('img');foreach($imgs as $img){    $allImageLinks[] = $img->getAttribute('class="lazy" data-src');}print_r($allImageLinks);// Array// (//     [0] => //www.baidu.com/img/baidu_jgylogo3.gif//     [1] => //www.baidu.com/img/bd_logo.png//     [2] => https://file.lsjlt.com/upload/202306/13/wdjrxipmqgd.gif// )// 利用 parse_url 分析链接foreach($allImageLinks as $link){    print_r(parse_url($link));}// Array// (//     [host] => www.baidu.com//     [path] => /img/baidu_jgylogo3.gif// )// Array// (//     [host] => www.baidu.com//     [path] => /img/bd_logo.png// )// Array// (//     [scheme] => http//     [host] => s1.bdstatic.com//     [path] => /r/www/cache/static/global/img/gs_237f015b.gif// )

是不是感觉好清晰,好有面向对象的感觉。就像第一次使用 ORM库 来进行数据库操作一样的感觉。我们一段一段来看。

$baidu = file_get_contents('https://www.baidu.com');$doc = new DOMDocument();@$doc->loadHTML($baidu);

首先是加载文档内容,这个比较好理解,直接使用 loadHTML() 方法加载 HTML 内容。它还提供了其它的几个方法,分别是:load() 从一个文件加载XML;loadXML() 从字符串加载XML;loadHTMLFile() 从文件加载HTML。

// 百度输出框$inputSearch = $doc->getElementById('kw');var_dump($inputSearch);// object(DOMElement)#2 //     ....echo $inputSearch->getAttribute('name'), PHP_EOL; // wd

首先是加载文档内容,这个比较好理解,直接使用 loadHTML() 方法加载 HTML 内容。它还提供了其它的几个方法,分别是:load() 从一个文件加载XML;loadXML() 从字符串加载XML;loadHTMLFile() 从文件加载HTML。

// 百度输出框$inputSearch = $doc->getElementById('kw');var_dump($inputSearch);// object(DOMElement)#2 //     ....echo $inputSearch->getAttribute('name'), PHP_EOL; // wd

接下来我们使用和前端 JS 一样的 DOM 操作API来操作HTML里面的元素。这个例子中就是获取百度的文本框,直接使用 getElementById() 方法获得id为指定内容的 DOMElement 对象。然后就可以获取它的值、属性之类的内容了。

// 获取所有图片的链接$allImageLinks = [];$imgs = $doc->getElementsByTagName('img');foreach($imgs as $img){    $allImageLinks[] = $img->getAttribute('class="lazy" data-src');}print_r($allImageLinks);// Array// (//     [0] => //www.baidu.com/img/baidu_jgylogo3.gif//     [1] => //www.baidu.com/img/bd_logo.png//     [2] => https://file.lsjlt.com/upload/202306/13/wdjrxipmqgd.gif// )// 利用 parse_url 分析链接foreach($allImageLinks as $link){    print_r(parse_url($link));}// Array// (//     [host] => www.baidu.com//     [path] => /img/baidu_jgylogo3.gif// )// Array// (//     [host] => www.baidu.com//     [path] => /img/bd_logo.png// )// Array// (//     [scheme] => http//     [host] => s1.bdstatic.com//     [path] => /r/www/cache/static/global/img/gs_237f015b.gif// )

这一段例子则是获取HTML文档中所有的图片链接。相比正则来说,是不是方便很多,而且代码本身就是自解释的,不用考虑正则的匹配失效的问题。配合另外一个PHP中自带的 parse_url() 方法也能非常方便地对链接进行分析,提取自己想要的内容。

XML的解析和对HTML的解析也是类似的,都使用 DOMDocument 和 DOMElement 提供的这个方法接口就可以很方便的进行解析了。那么我们想要生成一个标准格式的XML呢?当然也非常的简单,不需要再去拼接字符串了,使用这个类一样的进行对象化的操作。

生成一个XML

// 生成一个XML文档$xml = new DOMDocument('1.0', 'UTF-8');$node1 = $xml->createElement('First', 'This is First Node.');$node1->setAttribute('type', '1');$node2 = $xml->createElement('Second');$node2->setAttribute('type', '2');$node2_child = $xml->createElement('Second-Child', 'This is Second Node Child.');$node2->appendChild($node2_child);$xml->appendChild($node1);$xml->appendChild($node2);print $xml->saveXML();

其实只要有一点点的前端 JS 的基础都不难看出这段代码的含义。使用 createElement() 方法创造 DOMElement 对象,然后就可以为它添加属性和内容。使用 appendChild() 方法就可以为当前的 DOMElement 或者 DOMDocument 添加下级节点。最后使用 saveXML() 就能够生成标准的XML格式内容了。

感谢你能够认真阅读完这篇文章,希望小编分享的“PHP中如何使用DOMDocument来处理HTML、XML文档”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP中如何使用DOMDocument来处理HTML、XML文档

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP中如何使用DOMDocument来处理HTML、XML文档

这篇文章主要介绍了PHP中如何使用DOMDocument来处理HTML、XML文档,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php有什么特点1、执行速度快。2、具有很好的
2023-06-14

PHP中怎么使用DOMDocument来处理HTML、XML文档

小编给大家分享一下PHP中怎么使用DOMDocument来处理HTML、XML文档,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP中使用DOMDocument来处理HTML、XML文档解析HTML// 解析 HTML$
2023-06-14

如何使用BeautifulSoup处理XML文档中的XML命名空间前缀

在使用BeautifulSoup处理XML文档中的XML命名空间前缀时,可以通过传入参数 features="xml" 来告诉BeautifulSoup处理XML文档。然后,可以使用 find_all() 方法来查找带有命名空间前缀的元素。
如何使用BeautifulSoup处理XML文档中的XML命名空间前缀
2024-05-15

如何使用 PHP 函数处理 XML 数据?

使用 php xml 函数处理 xml 数据:解析 xml 数据:simplexml_load_file() 和 simplexml_load_string() 加载 xml 文件或字符串。访问 xml 数据:利用 simplexml 对象
如何使用 PHP 函数处理 XML 数据?
2024-05-05

html如何使用objectURL处理文件

小编给大家分享一下html如何使用objectURL处理文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用objectURL处理文件有一个特殊的方法叫做URL.createobjecturl(),用于从文件中创建唯一的
2023-06-27

PHP如何规定当解析器在 XML 文档中找到处理指令时所调用的函数

本文解析PHP如何指定处理指令的对应函数。当解析到外部实体时,调用xml_set_external_entity_resolver函数指定外部实体的文件名。内部实体则根据名称调用不同函数,如xml-stylesheet调用xml_set_stylesheet_processing函数。其他处理指令可通过xml_set_processing_instruction_handler函数指定回调函数,此函数接收处理指令名称和值。回调函数遵循特定签名,若涉及处理指令嵌套,需留意处理指令名称和值均为字符串,且PHP
PHP如何规定当解析器在 XML 文档中找到处理指令时所调用的函数
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录