我正在尝试删除所有空节点,但是代码也将带有image标签的节点检测为空。我需要保留带有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>
最佳答案
首先,让我们使用更全面的示例来消除歧义:
<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,它将选择
d5
和d6
divs
,而不是img
,而不是通过d1
d4
的divs
。
关于xpath - 删除空节点,但保留带有图像标签的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38955169/