我有一个像这样的 xml 输入:
<DepartmentData>
<Department>
<Employees>
<Employee>
<Id>123</Id>
<Name>John</Name>
<Incentive>1000</Incentive>
</Employee>
<Employee>
<Id>789</Id>
<Name>Mmark</Name>
<Incentive>5000</Incentive>
</Employee>
<Employee>
<Id>123</Id>
<Name>John</Name>
<Incentive>4000</Incentive>
</Employee>
</Employees>
</Department>
<Department>
<Employees>
<Employee>
<Id>674</Id>
<Name>John</Name>
<Incentive>1000</Incentive>
</Employee>
<Employee>
<Id>334</Id>
<Name>Mmark</Name>
<Incentive>5000</Incentive>
</Employee>
<Employee>
<Id>334</Id>
<Name>Mmark</Name>
<Incentive>4000</Incentive>
</Employee>
</Employees>
</Department>
<Department>
<Employees>
<Employee>
<Id>009</Id>
<Name>John</Name>
<Incentive>1000</Incentive>
</Employee>
<Employee>
<Id>887</Id>
<Name>Mmark</Name>
<Incentive>5000</Incentive>
</Employee>
<Employee>
<Id>678</Id>
<Name>John</Name>
<Incentive>4000</Incentive>
</Employee>
</Employees>
</Department>
</DepartmentData>
有多个部门,每个员工记录包含多个员工详细信息。
我需要循环遍历每个部门,然后对每个员工使用相同的员工 ID 对员工进行分组,以总结他们的奖励。
预期输出:
<root>
<Emps>
<Emp>
<id>123</id>
<incentive>5000</incentive>
</Emp>
<Emp>
<id>789</id>
<incentive>5000</incentive>
</Emp>
</Emps>
<Emps>
<Emp>
<id>674</id>
<incentive>1000</incentive>
</Emp>
<Emp>
<id>334</id>
<incentive>9000</incentive>
</Emp>
</Emps>
<Emps>
<Emp>
<id>009</id>
<incentive>1000</incentive>
</Emp>
<Emp>
<id>887</id>
<incentive>5000</incentive>
</Emp>
<Emp>
<id>678</id>
<incentive>4000</incentive>
</Emp>
</Emps>
</root>
您能帮我一下如何完成这项任务吗?
尝试检查多篇帖子。
我估计让您困惑的复杂性可能是给定的
Employee
可以出现在多个Department
元素中,而您想将所有Employee
具有给定 的元素组合在一起。因此,这Id
比Department
XSLT 1.0 中的大多数“分组”问题要困难一些,但实际上,通常使用的相同技术在这种情况下也可以发挥作用。对于更简单的分组情况,您可以定义一个
xsl:key
来匹配一个Employee
元素并使用其Id
子元素作为键,以便稍后可以使用它来检索Employee
具有给定的整个元素组Id
。例如:Employee
但在这种情况下,您不仅需要根据元素的 来分组Id
,还需要根据其Department
祖先元素来分组。例如,您可以像这样定义一个键:注意:该
generate-id()
函数是一种唯一标识任何元素的方法。它通常与一起使用xsl:key/@use
。要迭代给
Employee/Id
定 内的所有唯一值Department
,您可以选择Employee
每个 内的所有元素Department
,并使用谓词对它们进行过滤,该谓词检查当前Employee
是否等于Employee
具有该Department
标识符和的第一个元素。这将为您提供不同Id
标识符的列表。Employee
这个难题的最后一部分是
key
针对每个员工标识符及其对应的部门标识符调用该函数,从而为您提供一组Employee
元素,然后您可以按照所需的任何方式对其进行汇总。输出符合预期: