2016-02-18 66 views
1

誰能告訴我下面的模板匹配的含義下面XPATH模板匹配意味着

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

<xsl:template match="*(*)"> 

我猜測,第一個模板匹配將應用於所有沒有任何子元素的元素節點

並且第二個匹配適用於具有子元素的元素 謝謝

回答

2

*用於匹配任何元素。如果有方括號,表示要在該元素上進行檢查的條件。在這種情況下,not(*)正在檢查是否沒有子元素。

因此<xsl:template match="*[not(*)]">將匹配沒有子元素的元素。因此,它將匹配此(如Bob是一個文本節點,而不是元素)

<Name>Bob</Name> 

而這個(如type是一個屬性,而不是元素)。

<Name type="A" /> 

,但它不會匹配這個(爲Name有子元素FirstName

<Name><FirstName>Bob</FirstName></Name> 

第二種模式<xsl:template match="*(*)">實際上不是有效的語法。

如果你試圖以匹配確實有子元素的元素,你可以這樣做:

<xsl:template match="*[*]"> 
+0

thx Tim :) 可以用於第二個模板匹配我們可以像這樣匹配所有具有子元素的元素 –

+0

將元素與子元素匹配do '' –

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

這意味着,沒有在任何元素的元素。

<xsl:template match="*(*)"> 

這看起來在語法上是錯誤的。因爲你應該在那裏使用[]。那麼這意味着選擇任何有元素的元素。

這裏element是一個標籤<tag>而不是文本節點或屬性。希望它回答。