2013-04-16 131 views
-3

正如在标题中提到的,我想从XML文档中删除所有空元素。用phpQuery删除空的XML元素

通过我的意思是元素没有任何文本节点在它或它的孩子。

是否可以用phpQuery来做到这一点?

+0

这是可能的。你到目前为止尝试过哪些代码? – karmafunk

+0

尝试使用'filter($ callback)',但实际上没有它的文档,我无法了解它是如何工作的细节。 –

+0

你需要显示你的代码。 – karmafunk

回答

1

我用戈登的代码的答案在本主题:Reg expression to remove empty Tags (any of them)?

首先我想只是把他的XPath查询到phpQueryObject::find()方法,但它给了我一个警告,说这是不正确的查询。不知道为什么,因为它使用DOMXPath,应该工作。

无论如何,解决方案仍然非常简单。

$pqDoc = phpquery::newDocument() // phpQueryObject created some way. Doesn't matter here. 
$xp = new DOMXPath($pqDoc->getDOMDocument()); 
foreach($xp->query('//*[not(node()) or normalize-space() = ""]') as $node) { 
    $node->parentNode->removeChild($node); 
} 

现在你已删除空元素,你仍然可以使用你的改变phpQueryObject,因为它实际上已经在DOMDocument的参考工作。