我有一个HTML

<div class="news">
    <h3 class="border-bottom">标题2</h3>
    <p class="mt-0 ml-1">2023-04-01</p>
    <img src="20230401.jpg" class="w-50 float-right ml-2">
    <p class="lead"><p>说明2</p></p>
    <a href="https://.../news/245" class="btn btn-secondary">阅读更多内容</a>
</div>
<div class="news">
    <h3 class="border-bottom">标题1</h3>
    <p class="mt-0 ml-1">2023-03-31</p>
    <img src="20230331.jpg" class="w-50 float-right ml-2">
    <p class="lead"><p>说明1</p></p>
    <a href="https://.../news/244" class="btn btn-secondary">阅读更多内容</a>
</div>

我想提取每个项目的标题和日期.我试过这个了

$class = "news";
$dom = new DOMDocument();
$dom->loadHTML($html);
$a = new DOMXPath($dom);
$divs = $a->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $class ')]");

foreach ($divs as $link) {
    print_r($link->nodeValue);
}

但它表明:

标题2

2023-04-01

说明2

阅读更多内容

标题1

2023-03-31

说明1

阅读更多内容

我被困住了,想不出怎么解压

推荐答案

首先,您的样本无效(它包含嵌套的<p>).假设你解决了这个问题,我会try 这样做:

$qu = "//div[contains(@class,'{$class}')]";
$divs = $a->query($qu);
foreach ($divs as $div)
{   
    $targets = $a->query('.//h3 | p[1]',$div);
    echo($targets[0]->textContent ." ".$targets[1]->textContent."\r\n");
};

基于您的固定样本html的输出:

Title 2 2023-04-01
Title 1 2023-03-31

编辑:

要获得链接,应将for循环更改为:

{   
    $targets = $a->query('.//h3 | p[1] | a/@href',$div);
    echo($targets[0]->textContent ." ".$targets[1]->textContent." ".$targets[2]->textContent."\r\n");
};

现在,输出应为:

Title 2 2023-04-01 https://.../news/245
Title 1 2023-03-31 https://.../news/244

Php相关问答推荐

无法使用DOMPDF在PDF中呈现非ANSI字符

我如何知道BaseController中当前运行的是哪个控制器?

如何将对我的域的请求重定向到子文件夹中的索引,同时保留域URL并使用.htaccess?

无法在WooCommerce中发送客户笔记邮箱通知

如何删除Foreach语句中的重复值?

WooCommerce常规价格增加额外的附加平价

WooCommerce短代码,显示特定产品的购物车徽章中的当前数量

按列值将二维数组排序为不超过N个的递增组

允许客户定义特定WooCommerce产品的价格

函数存储到变量中

如何解决 Laravel 外键错误?

Symfony:从控制器内部调用自定义命令

如何在 Laravel 迁移中使用日期时间和天数?

如何为自定义帖子类型的自定义角色提供功能

如何搜索和替换 XML 文件中的一段文本?

如何在 laravel 中的同一个 slug 上显示不同的内容?

Laravel auth()->id() 在生产服务器中不工作

遇到特定键时修改二维数组以创建嵌套数据集

如何在光速网络服务器中使用 apache ..htaccess

如何在运行 update_post_meta 后更新 wp_wc_product_attributes_lookup 表?