【发布时间】:2019-09-22 03:59:30
【问题描述】:
我是一个新手,正在编写从 XML 到 CSV 的 XSLT 转换。下面是它应该看起来像的输出文件(期望的结果):
21072,Charles,Bradley,401K,377.96
21072,Charles,Bradley,401K-R,94.49
21082,Alex,Grossman,401K,10657.15
3,11129.6
但我得到了这个,不知道如何获得计数和总数,还完全排除了 401(k) T 的行。
21072,Charles,Bradley,401(k) [USA],377.96,
401(k) Roth [USA],94.49,
401(k) T,94.49,
21082,Alex,Grossman,401(k) [USA],10657.15,
401(k) T,10657.15,
我在 XSLT 之后尝试过这个
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wd="urn:com.workday.report/CR-TestReport"
exclude-result-prefixes="xs wd"
version="2.0">
<xsl:output method="text"/>
<xsl:param name="separator" select="','"/>
<xsl:param name="linefeed" select="' '"/>
<xsl:template match="/">
<xsl:call-template name="DetailRecords"/>
<xsl:call-template name="TrailerRecord"/>
</xsl:template>
<!--Builds Detail Records -->
<xsl:template name="DetailRecords">
<xsl:for-each select = "wd:Report_Data/wd:Report_Entry">
<xsl:value-of select="wd:Employee_ID"/>
<xsl:value-of select="$separator"/>
<xsl:value-of select="wd:First_Name"/>
<xsl:value-of select="$separator"/>
<xsl:value-of select="wd:Last_Name"/>
<xsl:value-of select="$separator"/>
<xsl:for-each select = "wd:Payroll_Result_Lines">
<xsl:value-of select="wd:Deduction/@wd:Descriptor"/>
<xsl:value-of select="$separator"/>
<xsl:value-of select = "wd:Result_Line_Amount"/>
<xsl:value-of select="$separator"/>
<xsl:value-of select="$linefeed"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<!--Builds Trailer Record -->
<xsl:template name="TrailerRecord">
</xsl:template>
</xsl:stylesheet>
对于这个 XML 文件。
<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/CR-TestReport">
<wd:Report_Entry>
<wd:Employee_ID>21072</wd:Employee_ID>
<wd:Last_Name>Bradley</wd:Last_Name>
<wd:First_Name>Charles</wd:First_Name>
<wd:Payroll_Result_Lines>
<wd:Deduction wd:Descriptor="401(k) [USA]">
<wd:ID wd:type="WID">ff68c0f1227c41a2a5221f6a7e6a67e5</wd:ID>
<wd:ID wd:type="Deduction_Code">401K</wd:ID>
</wd:Deduction>
<wd:Result_Line_Amount>377.96</wd:Result_Line_Amount>
</wd:Payroll_Result_Lines>
<wd:Payroll_Result_Lines>
<wd:Deduction wd:Descriptor="401(k) Roth [USA]">
<wd:ID wd:type="WID">2d277641684a48fb861a896e4eeb3eea</wd:ID>
<wd:ID wd:type="Deduction_Code">401K-R</wd:ID>
</wd:Deduction>
<wd:Result_Line_Amount>94.49</wd:Result_Line_Amount>
</wd:Payroll_Result_Lines>
<wd:Payroll_Result_Lines>
<wd:Deduction wd:Descriptor="401(k) T">
<wd:ID wd:type="WID">2d277641684a48fb861a896e4eeb3eea</wd:ID>
<wd:ID wd:type="Deduction_Code">401K-T</wd:ID>
</wd:Deduction>
<wd:Result_Line_Amount>94.49</wd:Result_Line_Amount>
</wd:Payroll_Result_Lines>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:Employee_ID>21082</wd:Employee_ID>
<wd:Last_Name>Grossman</wd:Last_Name>
<wd:First_Name>Alex</wd:First_Name>
<wd:Payroll_Result_Lines>
<wd:Deduction wd:Descriptor="401(k) [USA]">
<wd:ID wd:type="WID">ff68c0f1227c41a2a5221f6a7e6a67e5</wd:ID>
<wd:ID wd:type="Deduction_Code">401K</wd:ID>
</wd:Deduction>
<wd:Result_Line_Amount>10657.15</wd:Result_Line_Amount>
</wd:Payroll_Result_Lines>
<wd:Payroll_Result_Lines>
<wd:Deduction wd:Descriptor="401(k) T">
<wd:ID wd:type="WID">ff68c0f1227c41a2a5221f6a7e6a67e5</wd:ID>
<wd:ID wd:type="Deduction_Code">401K-T</wd:ID>
</wd:Deduction>
<wd:Result_Line_Amount>10657.15</wd:Result_Line_Amount>
</wd:Payroll_Result_Lines>
</wd:Report_Entry>
</wd:Report_Data>
【问题讨论】:
-
您能用文字解释一下所需的逻辑吗?例如。我希望每个 ___ 都有一行,并且在每一行中我都希望有这些值:___。
-
嗨,这是要求,输出将是一个逗号分隔的文件,每条记录输出在单独的行上。 1. 详细记录应包含以下字段(按此顺序): 员工 ID 名 姓 扣除代码 结果行 金额 尾记录应包含此数据(按此顺序): 文件上的记录总数 总金额文件 2.Remove 工资单结果,扣除代码为“401K-T”。更新您的代码以排除这些记录。谢谢,斯里尼