2010-07-08 41 views
2

总体目标是删除所有空节点 - 包括在删除子空节点时将变为空的节点。以下内容:如何查找XPath中的所有空子树

<xsl:template match="*[not(node())]"/> 

将删除空节点,但会留下以前只有空节点的空节点。我想我需要一个xpath来匹配所有的后代,其中没有属性和没有文本节点(忽略空白)的所有节点。

+0

(+1)。看到我的答案是一个正确的解决方案:) – 2010-07-08 12:54:45

回答

4

使用

<xsl:template match="*[not(.//@*) and not(descendent::text())]"/> 

注意and操作。使用or不能解决问题。

+0

在逻辑上,这与'* [not(.//@*或descendent :: text())]'是等价的,但我不知道是否难以优化。 – 2010-07-08 15:15:50

0

我想我找到了答案......

<xsl:template match="*[not(.//text() | .//@*)]"/> 

只要找到有没有后代的文本或属性的所有节点,对不对?有什么我错过了,这样就不会做我认为会在某些情况下?在我的简单测试中,这似乎起作用。

+1

这*是*正确的,但可能会导致一些XSLT处理器没有良好的优化器来执行联合,然后才能结束这是匹配。看到我的解决方案,它可能有更好的机会被优化,因为它使用明确的'和'。 – 2010-07-08 12:58:09

相关问题