2012-10-24 88 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