php - 使用 HTML DOM 替换第一个 <p> 标签

标签 php dom

问:根据任务,我需要替换 <p>仅在第一次出现时使用 h4 标记使用 HTML DOM .

我尝试使用 this question但不能成功

我的代码,

HTML

<div class="productabcont">
    <div class="protabtop">
        <div class="protabtopright">
            <p>Combed compact yarn</p> <!-- This i want to replace with <h4> tag. -->
            <p>Description line 1</p>
            <p>Description line 2</p>
        </div>
    </div>          
</div>

PHP

<?php    
    $dom = new DOMDocument();
    $dom->loadHTML($myHTML);
    $dom->getElementsByTagName('p')[0]->outertext = '<h4>'.$value.'</h4>';
    $dom->saveHTML();
?>

要求的输出

<div class="productabcont">
    <div class="protabtop">
        <div class="protabtopright">
            <h4>Combed compact yarn</h4> <!-- This is replaced with <p> tag. -->
            <p>Description line 1</p>
            <p>Description line 2</p>
        </div>
    </div>          
</div>

提前致谢。

最佳答案

在使用DOM* 对象时没有outerHTML。但是您可以使用所有其他可用的工具。

例如:

<?php

$html = <<<HTML
<div class="productabcont">
    <div class="protabtop">
        <div class="protabtopright">
            <p>Combed compact yarn</p> <!-- This i want to replace with <h4> tag. -->
            <p>Description line 1</p>
            <p>Description line 2</p>
        </div>
    </div>          
</div>
HTML;

$value = 'some headline';

$dom = new DOMDocument();
$dom->loadHTML($html);

$q = new DOMXPath($dom);

// find first p tag
foreach ($q->query('//p[1]') as $p) {
    // replace it with newly created element
    $p->parentNode->replaceChild($dom->createElement('h4', $value), $p);
}

echo $dom->saveHTML();

当然你不需要使用 xpath对于这样一个简单的示例,但是如果您以后需要更明确地说明需要更换哪个节点,它很容易扩展。

演示:https://3v4l.org/4Hj1e

关于php - 使用 HTML DOM 替换第一个 <p> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45072857/

相关文章:

javascript - 如何在没有 JS 库的情况下查找具有特定 CSS 样式的所有元素?

php - 如何在android和php中将选定的多个复选框值插入到mysql数据库的不同行中

php - 非常简单的 php 表单 - 一个字段未提交

Jquery克隆原始HTML而不是DOM

javascript - 手动调用 DOM Ready

javascript - 从 Javascript 数组创建按钮数组

php - 如何使用 .htaccess 重定向所有 API 请求,同时保持 Assets 请求完好无损?

php - MySql 到 PHP 到 XML RSS Feed - Ellipsis Char

php - 如何从mysql表中选择多个枚举值?

javascript - 使用 javascript 扩展 DOM 范围以覆盖部分选定的节点