【问题标题】:DOM parser: remove tags of empty text node Vs <br/>DOM 解析器:删除空文本节点的标签 Vs <br/>
【发布时间】:2011-10-12 01:59:34
【问题描述】:

我之前有这个post,关于删除具有空文本节点的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();

它运行良好,但我不希望它删除 &lt;br/&gt; 标签 - 我怎样才能保留它?

【问题讨论】:

    标签: php html xml xpath


    【解决方案1】:

    使用这个 XPath(它不包括 br 节点):

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

    【讨论】:

      【解决方案2】:

      尝试将您的 &lt;br/&gt; 标签替换为 [br/] 之类的标签,然后在之后恢复它们。

      足够简单的技巧:)

      【讨论】:

      • 这不是一个好的做法,而且会造成不必要的工作量
      【解决方案3】:

      在删除之前测试$node,例如:

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

      【讨论】:

        猜你喜欢
        • 2010-12-16
        • 1970-01-01
        • 2012-01-13
        • 2016-07-23
        • 2011-08-20
        • 2013-02-18
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多