在我的 For-each 循环中,包含两列:Division(字符串)和 Paydate(日期)。
完成 For-each 循环后,我会编写一条偏移线,以便我创建的日记帐分录保持平衡。但是,我需要在偏移线上包含部门和付款日期。由于这两个值仅“存在”于 For-each 循环内,因此我在偏移线上无法使用它们。
是否有人有使用 Java 参数函数(MSXSL 版本)的经验,将参数从 For-each 内部传递到全局参数?
我尝试更新 For-each 内的全局变量,首先尝试在全局和本地定义它,然后通过本地定义全局变量。从那时起我就知道 XSL 变量不是变量(抱歉,我是一个老 RPG 程序员,这对我来说是 gnu 的东西)。
<!-- Global param -->
<xsl:param name = "DiviG"/>
<!-- Choose to populate local variable -->
<xsl:choose>
<xsl:when test="PayGroupxRef='11DD_B' or PayGroupxRef='11DD_Hourly'">
<xsl:variable name = "Divi">504</xsl:variable>
</xsl:when>
每次运行只有一个 PayGroupxRef 和 PayPeriodDate。我需要将这两个值放在 For-each 循环的每一行以及偏移线上。
Division PayDate Amount
504 09/06/19 +10.00
504 09/06/19 +20.00
504 09/06/19 -30.00
XML 输入是由我无法控制的单独函数生成的。这是一个工资周期的工资数据,我可以访问的标签数量有限,例如PayGroupxRef 是 Pay Group 表中定义的 xRef 值,Pay Date 是 token payrun_pay_date。
输出是我需要在摘录的每一行以及 Payrun_Pay_Date 上通过 case 语句进行翻译的 PayGroupxRef。一旦处理完输入中的每条记录,我就需要再编写一行,该行还包含来自 For-each 循环(对粗俗术语的歉意)的总金额的负数以及 PayGroupxRef 和 PayDate。总和部分工作正常,这是我缺少的最后两部分。
简短的 XSLT 代码:
<!-- Headers -->
<xsl:text>Divi,</xsl:text>
<xsl:text>Acc Date,</xsl:text>
<xsl:text>
</xsl:text>
<!-- Details -->
<xsl:for-each select="Export/Record[Amount!=0] and AccrualType='AC'">
<xsl:choose>
<xsl:when test="PayGroupxRef='11DD_B' or PayGroupxRef='11DD_Hourly'">`
<xsl:text>504</xsl:text>
<xsl:variable name="Divi">504</xsl: variable>
</xsl:when>
<xsl:when test="PayGroupxRef='11DI_B'">
<xsl:text>XXX</xsl:text>
<xsl:variable name="Divi">XXX</xsl: variable>
</xsl:when>
<xsl:when test="PayGroupxRef='11DF_B' or PayGroupxRef='11DC_B'">
<xsl:text>510</xsl:text>
<xsl:variable name="Divi">510</xsl: variable>
</xsl:when>
<xsl:when test="PayGroupxRef='11DH_W' or PayGroupxRef='11DD_B'">
<xsl:text>40R</xsl:text>
<xsl:variable name="Divi">40R</xsl: variable>
</xsl:when>
<xsl:when test="PayGroupxRef='11DB_B' or PayGroupxRef='11DA_B'">
<xsl:text>50A</xsl:text>
<xsl:variable name="Divi">50A</xsl: variable>
</xsl:when>
<xsl:when test="PayGroupxRef='11DE_B'">
<xsl:text>500</xsl:text>
<xsl:variable name="Divi">500</xsl: variable>
</xsl:when>
<xsl:otherwise>
<xsl:text>???</xsl:text>
<xsl:variable name="Divi">???</xsl: variable>
</xsl:otherwise>
<xsl:value-of select="PayDate"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<!-- Write the offset line -->
<xsl:copy-of select="Divi"/>
<xsl:value-of select="PayDate"/>
</xsl:template>
</xsl:stylesheet>
我可以在 For-each 循环中看到有效的 $Divi,但如果我尝试在循环外使用它(如果我使用了不正确的术语,请道歉),它会说 $Divi 未定义。
最佳答案
您显然正在努力应对 XSLT 使用的函数式编程范例:您正在考虑“循环”和“更新”,并且您已经忘记了小学数学,在像 这样的公式中area=length*width
、length
和 width
被称为变量,因为它们对于不同的矩形是不同的,而不是因为在计算时矩形正在改变形状.
现在的问题是,您已经用获取答案的过程代码(实际上,用无法得到答案的损坏代码)来解释了问题,而不是用输入、输出、以及他们的关系。将非工作代码逆向工程为问题的高级陈述并不容易,而且应该没有必要。向我们展示输入,向我们展示输出,解释它们如何相互关联,并且您提供了问题的功能描述,该描述通常会非常自然地转化为功能解决方案。
关于java - 使用 Java 将本地参数传递给 XSLT 中的全局参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57827451/