Парсер DOM: удаляет теги пустого текстового узла - PullRequest
1 голос
/ 24 июля 2011

У меня есть пост ранее относительно удаления тегов 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();

работает отлично, но я не хочу, чтобы он удалял тег <br/> - как его сохранить?

Ответы [ 3 ]

7 голосов
/ 24 июля 2011

Используйте этот XPath (исключая br узлы):

//*[not(text() or node() or self::br)]
3 голосов
/ 24 июля 2011

Просто протестируйте $node перед удалением, например:

if (!in_array($node->nodeName, array('br'))) {  // add further nodes to keep
  $node->parentNode->removeChild($node);
}
0 голосов
/ 24 июля 2011

Попробуйте заменить теги <br/> на что-то вроде [br/], а затем восстановите их после.

Достаточно легкий трюк:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...