Xslt计算电影数量

时间:2017-10-30 20:41:05

标签: xml xslt

当年度小于或等于2005年时,我试图计算学生人数。 到目前为止,这是我所拥有的,但它返回xml文件中的学生总数,而不仅仅是年份小于或等于2005年的学生。

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

我也尝试过if语句但是没有用。

           <xsl:if test="year &lt;=2005">
              <xsl:value-of select="count(/student[year]) &lt;=2005"/>
            </xsl:if>

1 个答案:

答案 0 :(得分:0)

您可能需要考虑表达式

count(/student[year]) &lt;=2005

装置。它将count(/student[year])2005进行比较,并返回true或false。表达式

count(/student[year])

反过来计算表达式值

中的项目数
/student[year]

是谓词/student为真的[year]的子集。

表达式/student匹配一组元素,这些元素是(a)文档节点的子元素和(b)默认命名空间中的student(在这种情况下,我将假设默认情况下,未命名的命名空间与表达式匹配,其扩展名称为{}student)。

由于在任何格式良好的XML文档中,只能有一个元素是文档节点的子元素(一个最外层元素),因此这里有几种可能的情况:

  • 有几个最外面的元素;输入不是XML,转换出错。

  • 有一个最外面的元素,名称不是学生。 \student的值是空集,并且按[year]过滤它不能使它更小,因此您的count(...)表达式的值为0,并且我们开始的XPath表达式具有值true

  • 有一个最外面的元素,名为student。 \student的值是一个元素集,并按[year]过滤它将成功(元素具有名为year的子元素)或失败(它没有这样的子元素)。如果过滤器成功,则count(...)表达式的值为1,并且我们开始使用的XPath表达式的值为true,因为1小于或等于2005.如果过滤器失败,则{ {1}}表达式的值为0,我们开始使用的XPath表达式的值为count(...),因为0小于或等于2005

我认为阅读和反思XPath的基础教程可能会有所帮助。