我有一个XSL模板,它将XML文档处理为Gherkin中的测试。对于我正在生成的XML和Gherkin行中的每个元素,例如
And I fill in the "check-temp" field with "23"
那很好,但是我想只为前20个实例生成这一行,然后做一些其他输出,然后从我离开的地方继续。这样的东西,使用虚构的语法:
<xsl:for-each select="formline" [0..20]>
...other stuff...
<xsl:for-each select="formline" [21..40]>
与此相关,XSL能否“知道”找到了多少匹配?
已解决:感谢您的贡献。这就是我所做的:
# Fill in first 'half' of form
<xsl:for-each select="formline[not(position() > 20)]">
<xsl:for-each select="formentrycontext">And I fill in "<xsl:value-of select="formentry/@id"/>" with "xxx"
</xsl:for-each>
</xsl:for-each>
# Check first 'half' of form
<xsl:for-each select="formline[not(position() > 20)]">
<xsl:for-each select="formentrycontext">And the "<xsl:value-of select="formentry/@id"/>" field should contain "xxx"
</xsl:for-each>
</xsl:for-each>
# Fill in second 'half' of form
<xsl:for-each select="formline[position() > 20 and not(position() > last())]">
<xsl:for-each select="formentrycontext">And I fill in "<xsl:value-of select="formentry/@id"/>" with "xxx"
</xsl:for-each>
</xsl:for-each>
# Check second 'half' of form
<xsl:for-each select="formline[position() > 20 and not(position() > last())]">
<xsl:for-each select="formentrycontext">And I fill in "<xsl:value-of select="formentry/@id"/>" with "xxx"
</xsl:for-each>
</xsl:for-each>
我没有使用apply-templates,因为我想一次应用一个转换,然后再转换为相同的数据。也许有办法做到这一点,但到目前为止,这对我来说非常适合。
答案 0 :(得分:1)
与此相关,XSL&#34;能否知道&#34;找到了多少场比赛?
是的,请使用count()
功能:
count(formline[not(position() > 20)])
或者,在匹配的xsl:for-each
模板中,可以使用last()
函数。
<xsl:apply-templates select="formline[not(position() > 20)]"/>
和
<xsl:template match="formline">
<xsl:value-of select="last()"/>
<!-- Your processing here -->
</xsl:template>
答案 1 :(得分:0)
这种方法可能适合您:
<xsl:apply-templates select="formline[not(position() > 20)]"/>
...other stuff...
<xsl:apply-templates select="formline[position() > 20 and not(position() > 40)]"/>
您需要将代码显示在这样的
模板中<xsl:template match="formline">
所以你只需要每次都使用一个。如果XML数据中的表单元素元素不与其他元素混合,那么这将起作用,因此可以使用它们的位置 编辑:我喜欢使用“&gt;”和“不(&gt;)”而不是“&gt;”和“&amp; lt;”甚至“&amp; gt;”和“&amp; lt;”但那只是时尚。 编辑:根据Michael Kay的评论进行更正(谢谢,我不知道)