2013-06-05 45 views
1

xml文件的n個以上的項目數:的xsl:如何計數其中有沒有比孩子

<faculty> 
<student name="a a" group="5"> 
    <subject date="2013-02-01" name="science">124</subject> 
</student> 

<student name="q q" group="9"> 
    <subject date="2013-02-01" name="my">124</subject> 
</student> 

<student name="z z" group="2"> 
</student> 

<student name="v v" group="9"> 
    <subject date="2013-02-01" name="tro">tro</subject> 
</student> 
</faculty> 

需求:如何計數其中有不超過2項的數量科目。

我知道如何顯示所有這些項目和主體的數量,但我不知道怎麼算的科目總數:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:key name="name" match="subject" use="@name" /> 

<xsl:template match="subject"> 
    <xsl:if test="count(key('name', @name)) &lt; 2"> 
     subject: <xsl:value-of select="@name" /> 
     count: <xsl:value-of select="count(key('name', @name))" /> 
    </xsl:if> 
</xsl:template> 

在此先感謝

+0

當你說「物品」,你的意思是你想知道student'元素多少'有小於2'subject'子元素 –

+1

你需要列出所有的唯一主題名稱剛剛會發生一次? –

回答

2

下面將匹配

student[count(subject) &lt; 2] 

如果你想的總數:具有小於2個subject元素孩子的student元素在文檔中個元素,使用以下命令:

count(/faculty/student/subject) 

如果從subject元素要明顯@name值列表的計數:

count(/faculty/student/subject[generate-id()=generate-id(key('name', @name)[1])]) 
0

如果你只需要顯示發生subject元素只有一次,請注意以下and count(key('subject-name', @name)) = 1部分:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:key name="subject-name" match="subject" use="@name" /> 
    <xsl:template match="faculty"> 
     <xsl:for-each select=".//subject[count(. | key('subject-name', @name)[1]) = 1 and count(key('subject-name', @name)) = 1]"> 
      <xsl:sort select="@name" /> 
      <xsl:value-of select="@name" /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
1

如果我嘗試按照您的問題:

Q1:如何計數其中有沒有比孩子的n個以上的項目數」

這將是:count(items[count(*) &lt= $n ])

Q2:如何計算不超過2個科目的項目數量。

這不是從你的示例XML和XSLT真正清楚什麼是‘項目’應該是我的解釋是,這應該是主題名稱
比:爲了計算主題名稱也不會出現超過2次嘗試此:?

count(//subject[ 
     generate-id()=generate-id(key('name', @name)[1]) 
     and 
     count(key('name', @name)) &lt;= 2 
     ]) 
相關問題