我无法为以下问题创建XSLT。
最大金额= 100
输入:
EMP1
AMT = 10
EMP1
AMT = 20
EMP1
AMT = 90
EMP2
AMT = 50
EMP2
AMT = 60
输出
Header
EMP1
AMT = 10
EMP1
AMT = 20
EMP1
AMT = 20 --- EMP1 Amount total exceeding max amount so Total amount - Max Amount and rest of the amount will go in next batch section
Trailer
------------------------------
Header
EMP1
AMT = 70
EMP2
AMT = 50
EMP2
AMT = 10
Trailer
------------------------------
Header
EMP2
AMT = 50 and so on according to the data
Trailer
任何批记录中都不会包含金额超过最大金额的同一员工。
我尝试使用局部和全局变量,还尝试了XSLT中的Key概念,但似乎没有任何效果。帮助将不胜感激。
使用局部变量和全局变量对场景进行了尝试并捕获了“金额”字段,还使用了xslt的Key功能,但是没有运气
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="/DATA_DS/G_1/G_2/FILE_FRAGMENT/TEST_DD/Rel_Action">
<xsl:variable name="Amount_MAX">100</xsl:variable>
<!-- HEADER Begin -->
<xsl:text>Header</xsl:text>
<!-- HEADER End -->
<!-- DETAIL Begin -->
<xsl:for-each select="/DATA_DS/G_1/G_2/FILE_FRAGMENT/TEST_DD/Rel_Action">
<xsl:variable name="Amount_Loop"
select="Personal_Payments_Trav/Personal_Payments/Personal_Payment_Rec/Payment_Amount"/>
<xsl:choose>
<xsl:when test="/DATA_DS/G_1/G_2/FILE_FRAGMENT/TEST_DD/Rel_Action/Personal_Payments_Trav/Personal_Payments/Personal_Payment_Rec/Payment_Amount < 100">
<xsl:value-of select="Personal_Payments_Trav/Personal_Payments/Personal_Payment_Rec/Payment_Amount"/>
</xsl:when>
<xsl:otherwise>
<Record>
<xsl:value-of select="Personal_Payments_Trav/Personal_Payments/Personal_Payment_Rec/Payment_Amount - 99"/>
</Record>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
<!--Single space filler-->
<xsl:text> </xsl:text>
</xsl:for-each>
<!-- DETAIL End -->
<!-- TRAILER Begin -->
<xsl:text>Trailer</xsl:text>
<!-- TRAILER End -->
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Header
EMP1
AMT = 10
EMP1
AMT = 20
EMP1
AMT = 20 --- EMP1 Amount total exceeding max amount so Total amount - Max Amount and rest of the amount will go in next batch section
Trailer
------------------------------
Header
EMP1
AMT = 70
EMP2
AMT = 50
EMP2
AMT = 10
Trailer
------------------------------
Header
答案 0 :(得分:0)
这在XSLT中是一个非常棘手的问题。如果可以在XSLT 3.0中使用xsl:iterate,那么我建议:
(a)首次通过:使用xsl:iterate
在需要开始新批处理的位置注入“ new-batch”元素,您可以通过将当前批处理的大小作为参数保留来进行此操作xsl:iterate
。当您发现需要拆分为两个(或更多?)批次的物品时,请在此过程中进行拆分。
(b)第二遍:使用xsl:for-each-group group-starting-with="new-batch"
生成按批次分组的输出。
对不起,我没有时间为您解决细节。