删除空节点但保留带有图像标记的节点

时间:2016-08-15 12:33:15

标签: xpath domdocument

我正在尝试删除所有空节点,但代码还会检测图像标记为空的节点。我需要保留带有img标签的节点。此外,我不需要具有空格和其他不可打印字符的节点。这是我目前的代码:

$empties= $xpath->query('//*[not((*))]');
foreach($empties as $empty){
   $empty->parentNode->removeChild($empty);     
}   

我需要这样:

<div class='blah'> </div>

这些留下来

<div class='blah'><img src='bla'/></div>
<div class='blah'>some text</div>

1 个答案:

答案 0 :(得分:1)

首先,让我们通过使用更全面的示例来消除歧义:

<div id="d1">
  <div id="d2"/>
  <div id="d3" class='blah'><img src='bla'/></div>
  <div id="d4" class='blah'>some text</div>
  <div id="d5" class='blah'> </div>
  <div id="d6" class='blah'>
  </div>
</div>

,然后

  • //*[not(*) and text()[not(normalize-space())]]

    <强>说 选择 没有子元素但带有子文本的元素 仅包含空格。

    对于上述XML,它会选择d5d6 divs img d1d4 divs