Php 如何将div替换为其子p节点之一
这是我从回复中得到的html 我需要删除额外的文本 下面有一行内容Php 如何将div替换为其子p节点之一,php,regex,Php,Regex,这是我从回复中得到的html 我需要删除额外的文本 下面有一行内容 <?php $str = <<<HTML AAAA <span>span txt</span> <div class='unique_div' id='xrz' data-id='1'> div text <span>span text</span> <p class=
<?php
$str = <<<HTML
AAAA <span>span txt</span>
<div class='unique_div' id='xrz' data-id='1'>
div text
<span>span text</span>
<p class='unique_p'>
<span>p span text</span>
<p>p p text</p>
</p>
div text
</div>
BBBB <span>span txt</span>
HTML;
既然您看到的似乎是HTML,并且考虑到您的需求需要对HTML进行某种形式的修改,我建议使用类似的DOM解析器
如果我正确理解了您的问题,您希望将
节点替换为p
节点,该节点具有id
属性xrz
,该节点的class属性为unique\p
,并且是div
的子节点
获取div
很容易,因为它有一个id
,并且它们是唯一的。因此,我们可以使用一种方法来获得div
获取其子级p
变得有点棘手,因为我们希望确保它既是div
的子级,又具有指定的类。因此,我们将使用一个查询
最后,我们将使用from there将div
替换为其捕获的子p
这里有一个简单的例子
$str = <<<HTML
AAAA <span>span txt</span>
<div class='unique_div' id='xrz' data-id='1'>
div text
<span>span text</span>
<p class='unique_p'>
<span>p span text</span>
<p>p p text</p>
</p>
div text
</div>
BBBB <span>span txt</span>
HTML;
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($str, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$children = $xpath->query('//div/p[@class="unique_p"]');
$p = $children->item(0);
$div = $dom->getElementById('xrz');
$div->parentNode->replaceChild($p, $div);
echo $dom->saveHTML();
$str=项目(0);
$div=$dom->getElementById('xrz');
$div->parentNode->replaceChild($p,$div);
echo$dom->saveHTML();
输出应该是这样的
<p>AAAA <span>span txt</span>
<p class="unique_p">
<span>p span text</span>
</p><p>
BBBB <span>span txt</span></p></p>
AAAA span txt
p跨文本
BBBB span txt
如果您想知道为什么输出可能与您预期的略有不同,请务必注意,问题中提供的初始HTML实际上格式不正确
p
元素表示一个段落。它不能包含块级元素(包括P
本身)
因此,每当DOM解析器在另一个p
标记中发现一个打开的p
标记时,它将首先隐式关闭前一个标记。我们不理解。您的意思是在创建了第一个示例后,要将内容更改为$str
?我需要得到第二个示例中的结果为什么?只要根据您想要修改它的任何原因创建一个单独的输出IF($reason){$str=example1}else{$str=example2}
这是我从查询中得到的html。我需要删除额外的文本WOW。完美的解决方案。非常感谢。在运行查询时,您还应该指定div
class属性。@revo这是不必要的,因为根据规范,id
必须在整个DOM中是唯一的。id
足够唯一在没有进一步限定的情况下标识DOM中的任何元素。很抱歉,我查看了XPath查询,希望得到div[@class=“unique\u div”]
或div[@id=“xrz”]
,但没有找到您稍后指定它的行。我试图在上面的项目符号2中阐明代码的作用
<p>AAAA <span>span txt</span>
<p class="unique_p">
<span>p span text</span>
</p><p>
BBBB <span>span txt</span></p></p>