首页 >后端开发 >php教程 >如何使用 PHP DOM 将具有特定类的 HTML 元素中的文本提取到平面数组中?

如何使用 PHP DOM 将具有特定类的 HTML 元素中的文本提取到平面数组中?

DDD
DDD原创
2024-11-15 17:18:03959浏览

How to Extract Text from HTML Elements with Specific Classes into Flat Arrays using PHP DOM?

使用 PHP DOM 从具有指定类的元素中提取平面文本

从特定 HTML 元素中提取文本是 Web 开发中的常见任务。 PHP DOM 提供了强大的工具来解析 HTML 并访问其内容。本文解决了从具有指定类的元素中提取文本到两个平面数组中的特定要求。

问题

给定包含分布在多个 p 元素之间的文本的 HTML 内容交替类名,任务是将文本保存到两个数组中:一个用于标题,一个用于内容。例如,给定以下 HTML:

<p class="Heading1-P">
    <span class="Heading1-H">Chapter 1</span>
</p>
<p class="Normal-P">
    <span class="Normal-H">This is chapter 1</span>
</p>

我们需要获得以下输出:

$heading = ['Chapter 1', 'Chapter 2', 'Chapter 3'];
$content = ['This is chapter 1', 'This is chapter 2', 'This is chapter 3'];

解决方案

要完成此任务使用 PHP DOM 进行提取,我们使用 DOMDocument 和 DOMXPath。该解决方案涉及以下步骤:

  1. 将 HTML 加载到 DOMDocument 对象中:
$dom = new DOMDocument();
$dom->loadHTML($test);
  1. 创建 DOMXPath 对象来执行 XPath:
$xpath = new DOMXPath($dom);
  1. 使用 parseToArray() 函数从指定类的元素中提取文本:
$heading = parseToArray($xpath, 'Heading1-H');
$content = parseToArray($xpath, 'Normal-H');

在 parseToArray() 函数中:

  • 它对指定的类执行 XPath 查询。
  • 迭代匹配的节点并提取其文本内容。
  • 将提取的文本存储在数组中,并返回该数组。

这里是完整的 PHP 代码:

query($xpathquery);

    $resultarray = [];
    foreach ($elements as $element) {
        $nodes = $element->childNodes;
        foreach ($nodes as $node) {
            $resultarray[] = $node->nodeValue;
        }
    }

    return $resultarray;
}

$test = <<
    Chapter 2

This is chapter 2

Chapter 3

This is chapter 3

HTML; $dom = new DOMDocument(); $dom->loadHTML($test); $xpath = new DOMXPath($dom); $heading = parseToArray($xpath, 'Heading1-H'); $content = parseToArray($xpath, 'Normal-H'); var_dump($heading); echo "
"; var_dump($content); echo "
";

这种方法利用 PHP DOM 和 XPath 的强大功能来有效地从 HTML 文档中提取文本,从而允许进行更复杂和更有针对性的内容操作。

以上是如何使用 PHP DOM 将具有特定类的 HTML 元素中的文本提取到平面数组中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn