0

次の XML で、各従業員の最大給与を含むレコードのみを XSL で検索したいと考えています。

<?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>

前もって感謝します。

PS: ただし、すべての XML をここに貼り付けましたが、プレビューは同じではありません。だから、気にしないでください。:)

4

2 に答える 2

0

XSLT 1.0では、 Muechianグループ化を使用して要素をグループ化しRecord、次に各グループを並べ替えて、給与が最大のレコードを見つけることができます。

<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>
于 2012-07-06T12:27:55.760 に答える
0

この XSLT 1.0 スタイルシートは、各従業員の最高給与を保持する各レコードを返します。従業員が最大 2 つ以上のレコードを持っている場合は、最大のすべてのレコードが返されます。

<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 &gt; SALARY]" />

</xsl:stylesheet>

返された従業員ごとに最大 1 つのレコードのみが必要な場合は、質問を更新して、Martin の回答に進んでください。

于 2012-07-06T13:57:08.907 に答える