2010-07-08 38 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

相關問題