【问题标题】:How to get all tags with content from an element using PHP [duplicate]如何使用PHP从元素中获取包含内容的所有标签[重复]
【发布时间】:2022-01-11 15:54:59
【问题描述】:

是否可以使用 PHP(DOMDocument 类)获取所有带有内容的 HTML 元素(子元素)?我只是无法得到结果。假设我只知道我会有<td> 标签,但不知道<td> 里面会有什么标签 示例:

$doc = new DOMDocument(); 
$el = "<td><a href='http://google.hr'>test1</a><div>Test2</div></td>";
$doc->loadHTML($el);
$doc->getElementsByTagName("td")->item(0)->nodeValue /* I only get plain text */

编辑:没有类似 JavaScript 的解决方案

【问题讨论】:

  • 如何获取属性,带值?它看起来像是使用 PHP Simple HTML DOM Parser 之类的库的唯一“干净”方式,我知道它存在。
  • 您是否看到接受的答案以递归方式迭代/遍历每个节点?一旦你在一个节点上,你可以做任何你想做的事情,包括属性。如果这不是你想要的,你可以编辑一个你想从中得到什么的例子吗?

标签: php html dom


【解决方案1】:

这将为您提供所有元素信息:

$html = "<td><a href='http://google.hr'>test1</a><div>Test2</div></td>";
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('*') as $element ){
    echo "<pre>";
    print_R($element);
    echo "</pre>";
}

要获取属性信息,请使用:

$p = $dom->getElementsByTagName('a')->item(0);
if ($p->hasAttributes()) {
  foreach ($p->attributes as $attr) {
    $name = $attr->nodeName;
    $value = $attr->nodeValue;
    echo "Attribute '$name' :: '$value'<br />";
  }
}

【讨论】:

  • href属性在哪里?
  • href 不是标签。
  • @Slit 我已经更新了获取属性名称的答案。
  • 谢谢,看来唯一的方法是逐个元素迭代和检查元素。与 JavaScript innerHTML 完全不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 2019-01-12
  • 1970-01-01
  • 2015-04-14
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多