我正在尝试设置一个xslt文件,该文件从包含许多<student>
标签的xml文件中读取,并且在每个学生中,他们可以有多个包含课程信息的<course>
标签。
xslt文件读取每个学生在一个表格中打印出来的循环,但是我在尝试计算每个学生所拥有的课程数量时却遇到了麻烦,但是当你这么做时它会做什么
<xsl:value-of select="count(//student/course)" />
它列出了每个学生的课程总共21个。我希望它尝试,让这个学生有2个课程,然后当我打印下一个学生时,它列出了学生有多少课程,例如。 3,等等。任何想法如何设置计数,所以它只是每个学生只有它的课程而不是所有的?
答案 0 :(得分:3)
有很多方法可以实现这一目标。多一点代码可以帮助缩小范围,但我们可以解决这个问题。我建议的是代替count(//student/course)
调用应用模板,然后选择每个学生元素并输出count(course)
,就像你拥有当前代码一样:
<xsl:apply-templates/>
并添加此模板以输出计数
<xsl:template match="student">
<xsl:value-of select="count(course)" />
</xsl:template>
应该这样做。哦,你可以在网上测试一下:
答案 1 :(得分:1)
假设您拥有以下源XML:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<student>
<course>two</course>
<course>three</course>
</student>
<student>
<course>ten</course>
<course>nine</course>
<course>six</course>
</student>
</list>
并应用此XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<list>
<xsl:apply-templates/>
</list>
</xsl:template>
<xsl:template match="student">
<xsl:param name="pos">
<xsl:value-of select="position()"/>
</xsl:param>
<number>
<xsl:text>Student number </xsl:text>
<xsl:value-of select="$pos"/>
<xsl:text> has </xsl:text>
<xsl:value-of select="count(course)"/>
<xsl:text> courses.</xsl:text>
</number>
</xsl:template>
你得到这个输出:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<number>Student number 1 has 2 courses.</number>
<number>Student number 2 has 3 courses.</number>
</list>
请始终提供源XML和已检测的输出XML。另外,请提供您目前为止所使用的XSLT - 让人们更容易理解您的问题。
祝你好运, 彼得