2013-06-05 15 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 
     ]) 
相关问题