xml文件:
<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)) < 2">
subject: <xsl:value-of select="@name" />
count: <xsl:value-of select="count(key('name', @name))" />
</xsl:if>
</xsl:template>
提前致谢
答案 0 :(得分:2)
以下内容将匹配少于2个student
元素子元素的subject
元素:
student[count(subject) < 2]
如果您想要文档中subject
元素的总数,请使用以下内容:
count(/faculty/student/subject)
如果您想要@name
元素中不同subject
值列表的计数:
count(/faculty/student/subject[generate-id()=generate-id(key('name', @name)[1])])
答案 1 :(得分:1)
如果我尝试关注您的问题:
Q1:“如何计算不超过n个孩子的项目数”
这将是:count(items[count(*) <= $n ])
Q2:“如何计算不超过2个科目的项目数。”
从您的示例XML和xslt中可以清楚地知道“items”应该是什么。我的解释是,这应该是主题名称 比:要计算不超过2次的主题名称,请尝试:
count(//subject[
generate-id()=generate-id(key('name', @name)[1])
and
count(key('name', @name) ) <= 2
] )
答案 2 :(得分: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>