java - 使用 Java 将本地参数传递给 XSLT 中的全局参数

标签 java xslt parameter-passing

在我的 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>&#x0D;&#x0A;</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>&#x0D;&#x0A;</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*widthlengthwidth 被称为变量,因为它们对于不同的矩形是不同的,而不是因为在计算时矩形正在改变形状.

现在的问题是,您已经用获取答案的过程代码(实际上,用无法得到答案的损坏代码)来解释了问题,而不是用输入、输出、以及他们的关系。将非工作代码逆向工程为问题的高级陈述并不容易,而且应该没有必要。向我们展示输入,向我们展示输出,解释它们如何相互关联,并且您提供了问题的功能描述,该描述通常会非常自然地转化为功能解决方案。

关于java - 使用 Java 将本地参数传递给 XSLT 中的全局参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57827451/

相关文章:

JSON 到 XSLT : default XML node if JSON element does NOT exist

xml - XSL 查找字符串并从该点开始

xslt - 如何在 XSLT 的 HTML 输出中发出节点的转义 XML 表示

c++:参数参数转换类的好名字

c - 如何更改作为参数传递的变量的值?

java - 对对象所做的任何更改也会更改当前对象

Java:获取命令行大小(以字符为单位)

java - 如何获取可见性消失的 View 的高度以及在 xml 中定义为 wrap_content 的高度?

java - 在 Spring MVC 中使用@JsonView

url - 戈兰 : Passing a URL as a GET parameter