2012-10-24 59 views
0

我使用XPath从节点与下面这段代码删除<br />PHP 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>这是完美的。

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

我该如何解决这个问题?

+1

你的意思是'
'无处不在,你说'
'? – Quentin

+0

对不起,我的错误。修正了...... – laukok

+0

谢谢哈克。我怎么能确定一个父节点是空的? – laukok

回答

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> 
+0

谢谢你hakre!这就是我所追求的!谢谢! – laukok