PHP Xpath删除<br/>?

时间:2012-10-24 14:13:18

标签: php xpath domxpath

我使用xpath从节点中删除<br />,使用下面的代码

$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);
}

因此它将<p>Text<strong><br /></strong></p>移至<p>Text</p>,这是完美的。

但我不希望它从<br />中移除<p>Text<strong>Bold<br /></strong>Break</p>,因为<br />之后是文字。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果<br>的父元素节点的节点值是空字符串,则要删除它。这可能更符合您的需求:

//br[string(..) = '']

一个代码示例,显示哪一个与那些匹配(添加删除属性):

<?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();

输出(Demo):

<?xml version="1.0"?>
<root>
   <p>Text<strong><br remove="remove"/></strong></p>
   <p>Text<strong>Bold<br/></strong></p>
</root>