我希望通过XSL找到以下XML中每个不同员工的最高工资的唯一记录:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Record recordNumber="1">
<SALARY>20000</SALARY>
<EMPLOYEE>Emp1</EMPLOYEE>
<AGE>32</AGE>
</Record>
<Record recordNumber="2">
<SALARY>34000</SALARY>
<EMPLOYEE>Emp2</EMPLOYEE>
<AGE>34</AGE>
</Record>
<Record recordNumber="3">
<SALARY>12000</SALARY>
<EMPLOYEE>Emp1</EMPLOYEE>
<AGE>32</AGE>
</Record>
<Record recordNumber="4">
<SALARY>15000</SALARY>
<EMPLOYEE>Emp2</EMPLOYEE>
<AGE>34</AGE>
</Record>
<Record recordNumber="5">
<SALARY>22000</SALARY>
<EMPLOYEE>Emp1</EMPLOYEE>
<AGE>32</AGE>
</Record>
<Record recordNumber="6">
<SALARY>35000</SALARY>
<EMPLOYEE>Emp2</EMPLOYEE>
<AGE>34</AGE>
</Record>
</Root>
提前致谢。
P.S。:但是我在这里粘贴了所有XML,但预览不一样。所以,请不要介意。 :)
答案 0 :(得分:0)
使用XSLT 1.0,您可以使用Muechian grouping对Record
元素进行分组,然后您可以对每个组进行排序以查找具有最大SALARY的记录:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:key name="k1" match="Record" use="EMPLOYEE"/>
<xsl:template match="Root">
<xsl:copy>
<xsl:apply-templates select="Record[generate-id() = generate-id(key('k1', EMPLOYEE)[1])]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Record">
<xsl:for-each select="key('k1', EMPLOYEE)">
<xsl:sort select="SALARY" data-type="number" order="descending"/>
<xsl:if test="position() = 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
此XSLT 1.0样式表将返回每个记录,其中包含每个员工的最高薪水。如果员工最多有两个或更多记录,则将返回所有最大记录。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:key name="employee" match="Record" use="EMPLOYEE" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Record[ key('employee',EMPLOYEE)/SALARY > SALARY]" />
</xsl:stylesheet>
如果您每位员工只需要一个最大记录,那么请更新问题并转到Martin的答案。