DOM解析器:删除空文本节点Vs的标签

lau*_*kok 1 html php xml xpath

我之前有关于删除具有空文本节点的html标记的帖子.

$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();
Run Code Online (Sandbox Code Playgroud)

它工作得很完美,但我不想删除<br/>标签 - 我怎么能保留它?

Kir*_*huk 7

使用此XPath(它排除br节点):

//*[not(text() or node() or self::br)]
Run Code Online (Sandbox Code Playgroud)