總體目標是刪除所有空節點 - 包括在刪除子空節點時將變爲空的節點。以下內容:如何查找XPath中的所有空子樹
<xsl:template match="*[not(node())]"/>
將刪除空節點,但會留下以前只有空節點的空節點。我想我需要一個xpath來匹配所有的後代,其中沒有屬性和沒有文本節點(忽略空白)的所有節點。
總體目標是刪除所有空節點 - 包括在刪除子空節點時將變爲空的節點。以下內容:如何查找XPath中的所有空子樹
<xsl:template match="*[not(node())]"/>
將刪除空節點,但會留下以前只有空節點的空節點。我想我需要一個xpath來匹配所有的後代,其中沒有屬性和沒有文本節點(忽略空白)的所有節點。
使用:
<xsl:template match="*[not(.//@*) and not(descendent::text())]"/>
注意的and
操作。使用or
不能解決問題。
在邏輯上,這與'* [not(.//@*或descendent :: text())]'是等價的,但我不知道是否難以優化。 – 2010-07-08 15:15:50
我想我找到了答案......
<xsl:template match="*[not(.//text() | .//@*)]"/>
只要找到有沒有後代的文本或屬性的所有節點,對不對?有什麼我錯過了,這樣就不會做我認爲會在某些情況下?在我的簡單測試中,這似乎起作用。
這*是*正確的,但可能會導致一些XSLT處理器沒有良好的優化器來執行聯合,然後才能結束這是匹配。看到我的解決方案,它可能有更好的機會被優化,因爲它使用明確的'和'。 – 2010-07-08 12:58:09
(+1)。看到我的答案是一個正確的解決方案:) – 2010-07-08 12:54:45