要删除的PHP Xpath<;br/>;?

要删除的PHP Xpath<;br/>;?,php,xpath,domxpath,Php,Xpath,Domxpath,我正在使用xpath从包含以下代码的节点中删除 $nodeList = $xpath->query("//p[node()[1][self::br]]/br[1] | //p[node()[last()][self::br]]/br[last()] | //*[node()[last()][self::br]]/br[last()]"); foreach($nodeList as $node) { $node->parentNode->removeChild($node

我正在使用xpath从包含以下代码的节点中删除

$nodeList = $xpath->query("//p[node()[1][self::br]]/br[1] | //p[node()[last()][self::br]]/br[last()] | //*[node()[last()][self::br]]/br[last()]");
foreach($nodeList as $node) 
{
   $node->parentNode->removeChild($node);
}
因此,它将
文本

删除为
文本
,这是完美的

但是我不希望它从
文本粗体
中删除

,因为它们是

之后的文本


如何修复此问题?

如果

的父元素节点的节点值为空字符串,则要将其删除。这可能更符合您的需要:

//br[string(..) = '']
显示哪一个与这些匹配的代码示例(添加移除属性):

xpath('//br[字符串(..)=“”]')作为$br){
$br['remove']='remove';
}
echo$xml->asXML();
输出():


Text

文本粗体


你是说

你说的每一处

?是的,对不起,我错了。修正了…谢谢哈克雷。如何确定父节点为空?
<?php

$xml = simplexml_load_string('
<root>
   <p>Text<strong><br /></strong></p>
   <p>Text<strong>Bold<br /></strong></p>
</root>
');

foreach($xml->xpath('//br[string(..) = ""]') as $br) {
    $br['remove'] = 'remove';
}

echo $xml->asXML();
<?xml version="1.0"?>
<root>
   <p>Text<strong><br remove="remove"/></strong></p>
   <p>Text<strong>Bold<br/></strong></p>
</root>