2011-07-24 15 views
1

これは、空のテキストノードを持つhtmlタグを削除することに関して、以前はpostでした。DOMパーサ:空のテキストノードのタグを削除するVs <br/>

$dom = new DOMDocument(); 
$dom->loadHtml(
    '<p><strong><a href="http://xx.org.uk/dartmoor-arts">test</a></strong></p> 
    <p><strong><a href="http://xx.org.uk/depw"></a></strong></p> 
    <p><strong><a href="http://xx.org.uk/devon-guild-of-craftsmen"></a></strong></p> 
    <p>this line has a <br/>break</p> 
    ' 
); 

$xpath = new DOMXPath($dom); 


while(($nodeList = $xpath->query('//*[not(text()) and not(node())]')) && $nodeList->length > 0) { 
    foreach ($nodeList as $node) { 
     $node->parentNode->removeChild($node); 
    } 
} 


echo $dom->saveHtml(); 

それは完璧に動作しますが、私はそれが<br/>タグを削除する必要はありません - どのように私はそれを維持することができますか?

答えて

7

使用このXPathの簡単:

//*[not(text() or node() or self::br)] 
+0

この回答に感謝します! :-) – laukok

+0

@lauthiamkok、よろしくお願いします! –

3

は単なるテスト$node除去の前に、のように:

if (!in_array($node->nodeName, array('br'))) { // add further nodes to keep 
    $node->parentNode->removeChild($node); 
} 
+0

はあなたにヨッシーをありがとう! :-) – laukok

-3

[br/]ようなもので、あなたの<br/>タグを交換してみてください、その後、後にそれらを復元します。

(それはbrノードを除く)に十分なトリック:)

+2

これは良い習慣ではなく、必要以上に多くの作業を作成します – Alp

関連する問題