1

我正在尝试设置一个 xslt 文件,该文件从包含许多<student>标签的 xml 文件中读取,并且在每个学生内部,他们可以有多个<course>包含课程信息的标签。

xslt 文件读取每个学生的循环并将其打印在表格中,但我在尝试计算每个学生所拥有的课程数量时遇到了麻烦,但是当你这样做时它所做的一切

<xsl:value-of select="count(//student/course)" />

它列出了每个学生总共 21 门课程。我希望它尝试让这个学生有 2 门课程,然后当我打印下一个学生时,它会列出该学生有多少门课程,例如。3等。知道如何设置计数,以便每个学生只做它的课程而不是所有学生吗?

4

2 回答 2

3

有多种方法可以实现这一目标。多一点代码将有助于缩小上下文范围,但我们可以解决这个问题。我建议不要count(//student/course)调用应用模板,然后选择每个学生元素并输出count(course)类似的内容,以便您拥有当前代码:

 <xsl:apply-templates/>

并添加此模板以输出计数

<xsl:template match="student">
    <xsl:value-of select="count(course)" />
</xsl:template>

那应该这样做。哦,你可以在这里在线测试:

http://www.xsltcake.com/slices/TF0Yji

于 2013-08-29T12:48:31.553 回答
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>
 

</xsl:样式表>

你得到这个输出:

<?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>
于 2013-08-29T12:55:54.660 回答