首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何获得PHP中所有html元素的列表?

如何获得PHP中所有html元素的列表?
EN

Stack Overflow用户
提问于 2016-11-07 06:23:59
回答 3查看 3.1K关注 0票数 0

根据DOMDocument::getElementsByTagName的文档,我可以使用"*"参数调用函数,并从某些HTML代码中获得所有HTML元素的列表。

但是,使用以下代码:

代码语言:javascript
运行
AI代码解释
复制
<?php
  $dom = new DOMDocument();
  $dom->loadHTML("<html><body><div>hello</div><div>bye</div></body></html>");
  $nodes = $dom->getElementsByTagName("*");

  foreach ($nodes as $node) {
    $new_text= new DOMText($node->textContent."MODIFIED");

    $node->removeChild($node->firstChild);
    $node->appendChild($new_text);
  }
  $content = $dom->saveHTML();
  echo $content;
?>

我只得到一个元素的列表,上面代码的执行结果是:

代码语言:javascript
运行
AI代码解释
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>hellobyeMODIFIED</html>

虽然我期待着这样的事情:

代码语言:javascript
运行
AI代码解释
复制
<html><body><div>helloMODIFIED</div><div>byeMODIFIED</div></body></html>

DOMDocument::getElementsByTagName方法不应该返回HTML代码中可用的HTML元素列表吗?

注意:我需要显式地创建DOMText实例,因为我需要它在PHP5.4中工作。DOMNode::textContent仅可从PHP5.6编写

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-07 07:41:45

如果第一个参数是DOMDocument::getElementsByTagName,则'*'方法实际上返回所有标记。但是,在第一次迭代时,代码将<body>标记(包括所有子节点)替换为文本节点。

迭代节点,并且只修改具有nodeType属性等于XML_TEXT_NODE的节点。

代码语言:javascript
运行
AI代码解释
复制
$nodes = $dom->getElementsByTagName('*');

foreach ($nodes as $node) {
  for ($child = $node->firstChild; $child; $child = $child->nextSibling) {
    if (! ($child->nodeType === XML_TEXT_NODE && trim($child->textContent))) {
      continue;
    }

    // The textContent is writable since PHP 5.6.1
    if (PHP_VERSION_ID >= 50601) {
      $child->textContent .= 'MODIFIED';
      continue;
    }

    // For older versions, create DOMText explicitly
    $text = new DOMText($child->textContent . 'MODIFIED');
    try {
      if ($child->parentNode->replaceChild($text, $child))
        $child = $text;
    } catch (Exception $e) {
      trigger_error("Failed to modify text '$child->textContent': "
        . $e->getMessage(), E_USER_WARNING);
    }
  }
}

echo $dom->saveHTML();

注意,对于PHP5.6.1和更新版本,您不需要显式地创建DOMText实例,因为DOMNode::textContent属性可以进行读写访问。因此,您可以简单地通过为该属性分配一个字符串值来修改文本。只需确保该节点没有除XML_TEXT_NODE以外的其他子节点。

上面的代码检查trim($child->textContent)是否为空,因为文档可能包含额外的空格字符(包括换行符),例如:

代码语言:javascript
运行
AI代码解释
复制
<div><!-- newline/spaces -->
  <span>text</span><!-- newline/spaces -->
</div><!-- newline/spaces -->
票数 3
EN

Stack Overflow用户

发布于 2016-11-07 08:08:55

这个函数'DOMDocument::getElementsByTagName‘返回一个包含所有元素的类DOMNodeList的新实例。

它工作得很好:

代码语言:javascript
运行
AI代码解释
复制
<?php
$dom = new DOMDocument();
  $dom->loadHTML("<html><body><div>hello</div><div>bye</div></body></html>");
  $nodes = $dom->getElementsByTagName("*");

  foreach ($nodes as $node) {
      echo $node->tagName."<br />";
  }
?>

它输出文档的所有标记。

也许你需要这样的东西:

代码语言:javascript
运行
AI代码解释
复制
<?php


    $dom = new DOMDocument();
      $dom->loadHTML("<html><body><div>hello</div><div>bye</div></body></html>");
      $nodes = $dom->getElementsByTagName("*");

      foreach ($nodes as $node) {
          if ($node->tagName=='div'){
            $node->nodeValue .= "new content";
          }
      }

      $content = $dom->saveHTML();
      echo htmlspecialchars($content);

?>
票数 1
EN

Stack Overflow用户

发布于 2016-11-07 07:56:51

试试这个:-

代码语言:javascript
运行
AI代码解释
复制
foreach($dom->getElementsByTagName('*') as $element ){

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40467507

复制
相关文章
如何从 Python 列表中删除所有出现的元素?
在 Python 中,列表是一种非常常见且强大的数据类型。但有时候,我们需要从一个列表中删除特定元素,尤其是当这个元素出现多次时。本文将介绍如何使用简单而又有效的方法,从 Python 列表中删除所有出现的元素。
网络技术联盟站
2023/06/01
12.9K0
如何去掉列表中重复的元素
列表,在Python中是最常见的一种数据类型,对它了解的越多,编程的效率就越高。
TalkPython
2019/10/29
7.9K0
如何去掉列表中重复的元素
php-获得网页的所有链接
浏览量 1 <?php $url="http://www.baidu.com"; // 获取链接的HTML代码 $html=file_get_contents($url); // 创建DOMdoc
kdyonly
2023/03/03
2.3K0
Html 列表、表格、媒体元素
列表就是信息资源的一种展示形式,它可以使信息结构化和条理化,并以列表的样式显示出来,以便浏览者能更快捷地获得相应的信息。
久绊A
2023/03/24
1.5K0
如何从列表中获取元素
观察URAM的物理管脚,不难发现A/B端口都有相应的地址、使能、读写控制信号。与BRAM不同的是URAM的读写使能信号是同一个管脚RDB_WR_A/B,其为0时执行读操作,为1时执行写操作,这意味着一旦A/B端口独立,同一端口的读写操作就无法同时发生,因此,如果采用上一篇文章中介绍的方法将其配置为两个独立的单端口RAM,其读写行为与常规的单端口RAM是不同的,进一步而言,此时的读写行为类似于NO_Change模式。
Lauren的FPGA
2019/10/30
17.8K0
PHP所有函数列表
说所有函数有点夸张,有错误请指正! usleep() unpack() uniqid() time_sleep_until() time_nanosleep() sleep() show_source() strip_whitespace() pack() ignore_user_abort() highlight_string() highlight_file() get_browser() exit() eval() die() defined() define() constant() connect
老高的技术博客
2022/12/27
1.7K0
HTML标记语法之列表元素
1.无序列表     <ul>        <li type=”项目符号类型”></li>        <li type=”项目符号类型”></li>        <li type=”项目符号类型”></li>         ……         <li type=”项目符号类型”></li>     </ul>     type的可取值:disc:●、circle:○、square:■. 2.有序列表 <ol type=”项目符号类型”start = “列表起点(为数字)” >        <l
阿豪聊干货
2018/08/09
1.8K0
Java List.addAll()方法:添加所有元素到列表中
Java 集合类的 List.addAll() 方法用于将指定 collection 中的所有元素添加到列表。
用户7656790
2020/09/10
3.2K0
python打印列表中指定元素的所有下标
1》法一: song@ubuntu:~$ vi find2.py song@ubuntu:~$ more find2.py l=[1,2,3,4,7,2,5,6,2,8,9,0] first=0 for i in range(l.count(2)):     new_l=l[first:]     index=first+new_l.index(2)     print 'find the index of 2:',index     first=index+1 song@ubuntu:~$ python find2.py find the index of 2: 1 find the index of 2: 5 find the index of 2: 8 song@ubuntu:~$  2》法二: song@ubuntu:~$ vi find_2.py song@ubuntu:~$ more find_2.py l=[2,2,3,4,5,1,2,3,1,2,3,4,5] first=True for i in range(l.count(2)):     if first==True:         pos=l.index(2)         first=False     else:         pos=l.index(2,pos+1)
py3study
2020/01/03
3K0
Python中如何获取列表中重复元素的索引?
昨天分享了一个文章,Python中如何获取列表中重复元素的索引?,后来【瑜亮老师】看到文章之后,又提供了一个健壮性更强的代码出来,这里拿出来给大家分享下,一起学习交流。
前端皮皮
2022/08/17
13.7K0
Python中如何获取列表中重复元素的索引?
html如何设置有序列表的列表项,HTML的有序列表
针对HTML的有序列表,由于平常使用的不是很多,刚开始使用的时候也是有遇到一些坑,有几个小问题:
全栈程序员站长
2022/07/02
3.2K0
html如何设置有序列表的列表项,HTML的有序列表
python删除列表元素的所有常见方法(大全)
列表元素能增加就可以删除,前面我们介绍几种增加元素的方法,虽然都是增加但是也有所不同,这里介绍的删除列表元素的方法也是一样,下面就来演示一下。
python自学网
2021/12/01
7.5K0
python删除列表元素的所有常见方法(大全)
HTML中的内联元素与块级元素
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
3.2K0
5.HTML表格列表标签元素介绍
本章将主要给各位看友介绍表格 table 与列表 list 中常用的标签元素属性,本节标签一览如下所示:
全栈工程师修炼指南
2023/03/21
1.6K0
5.HTML表格列表标签元素介绍
零基础Python教程-如何修改列表中的元素
为了更好的学习在列表中如何修改元素,我们这次将用一个简单的小游戏作为例子,我们现在要创建一个游戏,要求玩家射杀从天而降的敌人;为此,可在开始时将一些敌人存储在列表中,然后每当有敌人被杀死时,就将其从列表中删除,而每次有新的敌人出现在屏幕上时,都将其添加到列表中。在整个游戏运行期间,敌人列表的长度将不断变化。
小小科
2019/12/26
5.5K0
Java 如何从一个 List 中随机获得元素
从一个 List 中随机获得一个元素是有关 List 的一个基本操作,但是这个操作又没有非常明显的实现。
HoneyMoose
2022/04/29
2K0
Java 如何从一个 List 中随机获得元素
点击加载更多

相似问题

如何获得<HTML>元素的类列表?

15

如何获得网页的所有元素Ids列表?

11

PHP:如何获得正确的HTML元素结束标记

43

如何获得列表元素的所有重复组合- prolog

35

获得第三级html列表(li)元素的php

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文