需要基于employee-id分组的XSLT 2.0映射帮助。 XML文件将通过按员工ID分组汇总数量和工时来生成。 金额-“#”表示正数,而“#(”表示负数。 小时-这将是持续时间的总和。
我没有尝试使用Hours,而是尝试了Amount,除了字符(#,#(也有空白值,也没有尝试过),并且可以使用。),它需要您的帮助和专业知识。
<?xml version="1.0" ?>
<Employees>
<Employee>
<Amount>#1,424.85</Amount>
<EmployeeID>1</EmployeeID>
<Name>Bob</Name>
<Surname>Shibob</Surname>
<Hours>24:20</Hours>
</Employee>
<Employee>
<Amount>#(1,424.85</Amount>
<EmployeeID>1</EmployeeID>
<Name>Bob</Name>
<Surname>Shibob</Surname>
<Hours>56:00</Hours>
</Employee>
<Employee>
<Amount>#70</Amount>
<EmployeeID>2</EmployeeID>
<Name>Sara</Name>
<Surname>Lee</Surname>
<Hours>57.30</Hours>
</Employee>
<Employee>
<Amount>#(1,001.20</Amount>
<EmployeeID>3</EmployeeID>
<Name>John</Name>
<Surname>Smith</Surname>
<Hours></Hours>
</Employee>
<Employee>
<Amount></Amount>
<EmployeeID>4</EmployeeID>
<Name>Penny</Name>
<Surname>Wise</Surname>
<Hours>56:59</Hours>
</Employee>
<Employee>
<Amount>#(.30</Amount>
<EmployeeID>4</EmployeeID>
<Name>Penny</Name>
<Surname>Wise</Surname>
<Hours>26:03</Hours>
</Employee>
</Employees>
<?xml version="1.0" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Define keys used to group elements -->
<xsl:key name="keyEmployeeID" match="Employee" use="EmployeeID" />
<xsl:template match="/">
<Employees>
<xsl:for-each select="//Employee[generate-id(.) = generate-id(key('keyEmployeeID', EmployeeID)[1])]">
<Employee>
<xsl:variable name="empID">.
<xsl:value-of select="EmployeeID" /></xsl:variable>
<EmployeeID><xsl:value-of select="EmployeeID" /></EmployeeID>
<Name1><xsl:value-of select="//Employee[EmployeeID=$empID]/Name" /></Name1>
<Surname><xsl:value-of select="//Employee[EmployeeID=$empID]/Surname" /></Surname>
<!-- Show the total Amount for the current Employee -->
<code><xsl:value-of select="sum(//Employee[EmployeeID=$empID]/Amount)" /></code>
</Employee>
</xsl:for-each>
</Employees>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
您那里有很多奇怪的数据,其中有一些空的Hours
或Amount
元素,我选择在对值求和时忽略它们。另外,您还没有确切告诉我们您想要哪种输入格式以及想要哪种结果格式,我只是想假设Hours
的格式为hh:mm
,可以将其转换为{{1} },格式为“ PThhHmmM”,然后您想要对这些持续时间求和并将其作为持续时间输出:
xs:dayTimeDuration