2013-02-28 53 views
2

我有這個鍵,這可能是空的:是否可以計算xslt鍵中的項目數量?

<xsl:key 
     name="k1" 
     match="div[contains(@class, 'contents')]/node()[not(self::br) and not(ancestor-or-self::p)]" 
     use="generate-id(following-sibling::br[1])"/> 

目前,以檢查是否其爲空(在一個XSL:模板的塊匹配的div [含有(@class,「內容」)])我重新運行的xpath (舉例):

<xsl:when test="count(node()[not(self::br) and not(ancestor-or-self::p)]) > 1"> 

有什麼,爲什麼我只能指望例如像在關鍵項目:

<xsl:when test="count(key('k1', *) > 1"> 

我想過使用一個<xsl:for-each>一個nd將isempty var分配給false,但希望有一個更清晰的方法。

回答

1

您可以計算映射到密鑰值的特定特定節點的數量,但不是整個密鑰已知的節點總數(除了映射到每個值的所有節點集的並集)。我會確定第二鑰匙具有相同match但不同use

<xsl:key 
    name="k2" 
    match="div[contains(@class, 'contents')]/node()[not(self::br) and not(ancestor-or-self::p)]" 
    use="generate-id(..)"/> 

,然後讓使用count(key('k2', generate-id()))

0

div[contains(@class, 'contents')]模板內的計數只需使用

count(//div[contains(@class, 'contents')]/node() 
           [not(self::br) and not(ancestor-or-self::p)]) 
+0

感謝您的回覆 - 這正是我正在做的,但希望我不必多次運行查詢,一次數一次,一次創建他的關鍵。 – Tom 2013-03-01 13:57:51

1

如果你創建一個第二個密鑰使用常數在th E使用屬性:

<xsl:key 
    name="k1_all" 
    match="div[contains(@class, 'contents')]/node()[not(self::br) and not(ancestor-or-self::p)]" 
    use="'all'"/> 

然後你可以簡單地使用:

<xsl:value-of select="count(key('k1_all','all'))"/> 

至少這樣你就可以直接下一個地方的兩個鍵(一個用於查找和一個計數)在對方XSLT文件,以便複雜的XPath更易於維護。

相關問題