gpt4 book ai didi

XSLT How to do a classic for x to y loop?

转载 作者:行者123 更新时间:2023-12-04 22:59:16 25 4
gpt4 key购买 nike

我需要做一个经典的 for i=0 到 N 循环,在 xSTL 1.0 中如何实现?

谢谢。

<xsl:for-each select="¿¿¿$i=0..5???">
<fo:block>
<xsl:value-of select="$i"/>
</fo:block>
</xsl:for-each>

举个例子,我有

<foo>
<bar>Hey!</bar>
</foo>

并且想要一个输出

Hey!
Hey!

最佳答案

XSLT 是一种函数式编程语言,因此它与您已知的任何过程语言都非常不同。

虽然 for 循环在 XSLT 中是可能的,但它们没有利用 XSLT(和一般的函数式编程)的固有优势。

for 循环经常被误用于解决最好用函数式方法(即匹配模板)解决的问题。换句话说,循环在 XSLT 中并不是真正的“经典”。

因此,您可能不得不折返,找出您面临的问题,而不是讨论您的解决方案。然后,XSLT 社区可能会提出一个本质上更实用的解决方案。您可能已成为 XY problem 的受害者.


现在,XSLT 本质上擅长的事情之一就是递归。通常,在过程语言中用循环解决的问题在 XSLT 中用递归模板解决。

<xsl:template name="recursive-template">
<xsl:param name="var" select="5"/>
<xsl:choose>
<xsl:when test="$var > 0">
<xsl:value-of select="$var"/>
<xsl:call-template name="recursive-template">
<xsl:with-param name="var" select="$var - 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>

总而言之,我建议您查看“经典”递归而不是“经典”for 循环。您可以在 IBM 文章 here 中找到关于此主题的更多信息。 .


EDIT 作为对您已编辑问题的回应。如果您的问题真的归结为两次输出文本内容:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text"/>

<xsl:template match="/foo">
<xsl:apply-templates select="bar"/>
<xsl:apply-templates select="bar"/>
</xsl:template>

</xsl:stylesheet>

这对于动态迭代次数当然是不可行的。

关于XSLT How to do a classic for x to y loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com