Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT-从同一记录中获取两个值之和的问题_Xml_Sum_Xslt 2.0 - Fatal编程技术网

Xml XSLT-从同一记录中获取两个值之和的问题

Xml XSLT-从同一记录中获取两个值之和的问题,xml,sum,xslt-2.0,Xml,Sum,Xslt 2.0,我无法使用XSLT从下面的XML中获取TotalPay值。TotalPay是每个员工的总工资与工资类型数量的总和。请参阅下面的XML数据和我试图实现的预期结果 <---XML Data----> <Payroll_Data> <EmpId>1000</EmpId> <FirstName>Mark</FirstName> <LastName>Henry</LastName> <Salary>

我无法使用XSLT从下面的XML中获取TotalPay值。TotalPay是每个员工的总工资与工资类型数量的总和。请参阅下面的XML数据和我试图实现的预期结果

<---XML Data---->

<Payroll_Data>
<EmpId>1000</EmpId>
<FirstName>Mark</FirstName>
<LastName>Henry</LastName>
<Salary>
    <Type>B</Paytype>   
    <GrossPay>1000.50</GrossPay>
</Salary>
<Salary>
    <Type>X</Paytype>   
    <GrossPay>847.50</GrossPay>
</Salary>
</Payroll_Data>
<Payroll_Data>
<EmpId>1001</EmpId>
<FirstName>John</FirstName>
<LastName>Diggle</LastName>
<Salary>
    <Type>B</Paytype>   
    <GrossPay>800.98</GrossPay>
</Salary>
<Salary>
    <Type>X</Paytype>   
    <GrossPay>630.50</GrossPay>
</Salary>
<Salary>
    <Type>Y</Paytype>   
    <GrossPay>600.50</GrossPay>
</Salary>

</Payroll_Data>

<----Expected Result---->
EmpId   FirstName   LastName    Type    GrossPay    TotalPay 
1000    Mark        Henry       B       1000.50     1847.98 (1000.50+847.48)
1000    Mark        Henry       X       847.48      1847.98
1001    John        Diggle      B       800.98      2031.98 (800.98+630.50+600.50)
1001    John        Diggle      X       630.50      2031.98
1001    John        Diggle      Y       600.50      2031.98
这是一个简单的总和../Salary/GrossPay在Salary元素的上下文中,因为数据似乎已经分组:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="3.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
     <xsl:apply-templates select="//Salary"/>
  </xsl:template>

  <xsl:template match="Salary">
      <xsl:value-of select="../(EmpId, FirstName, LastName), Type, GrossPay, sum(../Salary/GrossPay)" separator="&#9;"/>
      <xsl:text>&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

@马丁。。它起作用了。。谢谢你的帮助。。