2

私はXMLとXLSTにまったく慣れていません。XMLで吐き出されるレポートがあります。数千のレコードがありますが、同じ2行のデータが何度も繰り返されています。出力XMLファイルをこれらの2つの一意のデータ行のみに制限する方法が必要です。

これが私のXMLファイルが現在どのように見えるかの例です:

<zd:Report_Data xmlns:zd="urn:com.xxxx.report/xxxx-Employee_Status-Outbound">
   <zd:Report_Entry>
<zd:empStat.emplStatusCode>A</zd:empStat.emplStatusCode>
<zd:empStat.name>Active Employee</zd:empStat.name>
<zd:worker>
<zd:empStat.lastUpdateDate>1/1/1968</zd:empStat.lastUpdateDate>
<zd:empStat.actvInd>1</zd:empStat.actvInd>
</zd:worker>
   </zd:Report_Entry>
   <zd:Report_Entry>
<zd:empStat.emplStatusCode>A</zd:empStat.emplStatusCode>
<zd:empStat.name>Active Employee</zd:empStat.name>
<zd:worker>
<zd:empStat.lastUpdateDate>1/1/1968</zd:empStat.lastUpdateDate>
<zd:empStat.actvInd>1</zd:empStat.actvInd>
</zd:worker>
   </zd:Report_Entry>
   <zd:Report_Entry>
<zd:empStat.emplStatusCode>A</zd:empStat.emplStatusCode>
<zd:empStat.name>Active Employee</zd:empStat.name>
<zd:worker>
<zd:empStat.lastUpdateDate>1/1/1968</zd:empStat.lastUpdateDate>
<zd:empStat.actvInd>0</zd:empStat.actvInd>
</zd:worker>
   </zd:Report_Entry>
   <zd:Report_Entry>
<zd:empStat.emplStatusCode>A</zd:empStat.emplStatusCode>
<zd:empStat.name>Active Employee</zd:empStat.name>
<zd:worker>
<zd:empStat.lastUpdateDate>1/1/1968</zd:empStat.lastUpdateDate>
<zd:empStat.actvInd>0</zd:empStat.actvInd>
</zd:worker>
   </zd:Report_Entry>
   </zd:Report_Data>

これは私がそれをどのように見せたいかです:

<zd:Report_Data xmlns:zd="urn:com.xxxx.report/xxxx-Employee_Status-Outbound">
   <zd:Report_Entry>
<zd:empStat.emplStatusCode>A</zd:empStat.emplStatusCode>
<zd:empStat.name>Active Employee</zd:empStat.name>
<zd:worker>
<zd:empStat.lastUpdateDate>1/1/1968</zd:empStat.lastUpdateDate>
<zd:empStat.actvInd>1</zd:empStat.actvInd>
</zd:worker>
   </zd:Report_Entry>
   <zd:Report_Entry>
<zd:empStat.emplStatusCode>A</zd:empStat.emplStatusCode>
<zd:empStat.name>Active Employee</zd:empStat.name>
<zd:worker>
<zd:empStat.lastUpdateDate>1/1/1968</zd:empStat.lastUpdateDate>
<zd:empStat.actvInd>0</zd:empStat.actvInd>
</zd:worker>
   </zd:Report_Entry>
   </zd:Report_Data>

^^更新


このサイト(http://stackoverflow.com/questions/3016929/selecting-unique-records-in-xslt-xpath)で機能すると思われるものを見ましたが、自分の状況に適用するのに問題があります。どんな助けでも大歓迎です!

これは私がここで読んだ別の投稿に基づいて私がこれまでに持っているものです。残念ながら、データは返されません。

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:key name="kItemBy3Children" match="Report_Entry"
     use="concat(empStat.emplStatusCode, '+', empStat.name, '+', empStat.lastUpdateDate, '+', empStat.actvInd)"/>

 <xsl:template match="/">
       <xsl:copy-of select=
        "*/item[generate-id()
              = generate-id(key('kItemBy4Children',
                                concat(empStat.emplStatusCode,
                                       '+', empStat.name,
                       '+', empStat.lastUpdateDate,     
                                       '+', empStat.actvInd)
                               )
                            )
               ]
        "/>
 </xsl:template>
</xsl:stylesheet>
4

4 に答える 4

1

このスタイルシート...

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ZD="urn:com.xxxx.report/xxxx-Employee_Status-Outbound">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:key name="kItemBy4Children" match="ZD:Report_Entry"
     use="concat(ZD:empStat.emplStatusCode, '+', ZD:empStat.name, '+', ZD:worker/ZD:empStat.lastUpdateDate, '+', ZD:worker/ZD:empStat.actvInd)"/>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>

 <xsl:template match="ZD:Report_Data">
  <xsl:copy>
    <xsl:apply-templates select="@*" />
    <xsl:copy-of select=
      "ZD:Report_Entry[ generate-id() = generate-id(key('kItemBy4Children',
       concat(ZD:empStat.emplStatusCode, '+', ZD:empStat.name, '+', ZD:worker/ZD:empStat.lastUpdateDate, '+', ZD:worker/ZD:empStat.actvInd))[1])]"/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

...この入力ドキュメントを変換します...

<ZD:Report_Data xmlns:ZD="urn:com.xxxx.report/xxxx-Employee_Status-Outbound">

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Terminated Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>0</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Terminated Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>0</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

</ZD:Report_Data>

...この出力ドキュメントに..。

<ZD:Report_Data xmlns:ZD="urn:com.xxxx.report/xxxx-Employee_Status-Outbound">
  <ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>
  <ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Terminated Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>0</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>
</ZD:Report_Data>

説明

Report_Dataノードは、4人の子メンバーによって測定されたものと同じ内容のグループにグループ化されます。つまり、個別のReport_Dataごとに1つのグループがあり、各グループの最初のメンバーのみが出力されます。この手法は、ミュンヒアングループ化と呼ばれます。Muenchianのグループ化について長い説明をすることも、すでにこれを説明している数百のStackOverflowの質問を検索することもできます。私は他の誰かが書いたことを繰り返すだけです。

検索の開始点:

アップデート

empStat.emplStatusCodeフィールドを修正しました。empStat.nameフィールドの前にはZD:worker/を付ける必要があります。

于 2012-06-21T00:15:09.573 に答える
0

最初の2行を選択するだけでよい場合、それは非常に簡単です。

<xsl:template match="/*">
  <xsl:copy>
    <xsl:copy-of select="*[1]|*[2]"/>
  </xsl:copy>
</xsl:template>

しかし、おそらく私はその問題を誤解しました。

于 2012-06-20T21:31:44.617 に答える
0

私はキーを使用していないので、これはあなたの試みとは異なる解決策です。XSLTのキーがどのように機能するかを知る必要がないため、このように簡単だと思います(実際、これまで必要だったことがないため、キーがどのように機能するかはわかりません)。

名前空間プレフィックスのURIを宣言したことに注意してくださいZD。あなたはあなたのものを挿入する必要があります。

まず、基本的にすべてのコンテンツをコピーするためにIDテンプレートを適用しました。

次に、<ZD:Report_Entry>要素のテンプレートがあります。そのテンプレートでは、同じ内容の先行する兄弟要素がある場合、選択された要素は省略されます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ZD="http://xyz.abc">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/ZD:Report_Data/ZD:Report_Entry">
        <xsl:choose>
            <xsl:when test="preceding-sibling::ZD:Report_Entry[(ZD:empStat.emplStatusCode = current()/ZD:empStat.emplStatusCode) and (ZD:empStat.name = current()/ZD:empStat.name) and (ZD:worker/ZD:empStat.lastUpdateDate = current()/ZD:worker/ZD:empStat.lastUpdateDate) and (ZD:worker/ZD:empStat.actvInd = current()/ZD:worker/ZD:empStat.actvInd)]"/>
            <xsl:otherwise>
                <xsl:copy-of select="."/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

先行する兄弟要素のチェックは、先行する兄弟要素を選択することによって行われ<ZD:Report_Entry>ます。その要素の条件は、その4つのコンテンツ要素の値が、選択したノードのそれぞれのコンテンツ要素の値と一致することです(current())。

さまざまな基準に基づいてレコードが等しいかどうかを比較する必要がある場合は、角括弧内の部分を変更します。

テストケース

このサンプルドキュメント:

<ZD:Report_Data xmlns:ZD="http://xyz.abc">

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Terminated Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>0</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>2</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Active Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>1</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

<ZD:Report_Entry>
<ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
<ZD:empStat.name>Terminated Employee</ZD:empStat.name>
<ZD:worker>
<ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
<ZD:empStat.actvInd>0</ZD:empStat.actvInd>
</ZD:worker>
</ZD:Report_Entry>

</ZD:Report_Data>

この出力に変換されます:

<ZD:Report_Data xmlns:ZD="http://xyz.abc">
    <ZD:Report_Entry>
        <ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
        <ZD:empStat.name>Active Employee</ZD:empStat.name>
        <ZD:worker>
            <ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
            <ZD:empStat.actvInd>1</ZD:empStat.actvInd>
        </ZD:worker>
    </ZD:Report_Entry>
    <ZD:Report_Entry>
        <ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
        <ZD:empStat.name>Terminated Employee</ZD:empStat.name>
        <ZD:worker>
            <ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
            <ZD:empStat.actvInd>0</ZD:empStat.actvInd>
        </ZD:worker>
    </ZD:Report_Entry>
    <ZD:Report_Entry>
        <ZD:empStat.emplStatusCode>A</ZD:empStat.emplStatusCode>
        <ZD:empStat.name>Active Employee</ZD:empStat.name>
        <ZD:worker>
            <ZD:empStat.lastUpdateDate>1/1/1968</ZD:empStat.lastUpdateDate>
            <ZD:empStat.actvInd>2</ZD:empStat.actvInd>
        </ZD:worker>
    </ZD:Report_Entry>
</ZD:Report_Data>

更新:<ZD:Record_Entry>要素の内容だけでなく、要素を正しくコピーしました

于 2012-06-20T21:47:43.863 に答える
0

私は、特にこのXMLスキーマではなく、一般的に作業しながら、あなたが望むものを達成する何かをまとめようとしました。

私は疲れていて、それは非常にファジーでハッキーです(人々を憎む前に注意してください)ので、おそらくより良い方法がありますが、それはうまくいくようです。

    <!-- root and static content -->
    <xsl:template match="/">
        <root>
            <xsl:apply-templates select='*/*' />
        </root>
    </xsl:template>


    <!-- children - output only unique -->
    <xsl:template match='*'>
        <xsl:variable name='node' select='.' />

        <!-- does this node have identical siblings up ahead? If so, skip it, and we'll output a sibling later -->
        <xsl:variable name='has_identical_siblings'>
            <xsl:for-each select='following-sibling::*[name() = name($node)]'>
                <xsl:call-template name='check_identical'>
                    <xsl:with-param name='this_node_profile'>
                        <xsl:copy-of select='$node' />
                    </xsl:with-param>
                    <xsl:with-param name='check_against'>
                        <xsl:copy-of select='.' />
                    </xsl:with-param>
                </xsl:call-template>
            </xsl:for-each>
        </xsl:variable>

        <!-- output? -->
        <xsl:if test='not(normalize-space($has_identical_siblings))'>
            <xsl:copy-of select='.' />
        </xsl:if>
    </xsl:template>

    <!-- util: two nodes are identical? -->
    <xsl:template name='check_identical'>
        <xsl:param name='this_node_profile' />
        <xsl:param name='check_against' />
        <xsl:if test='$this_node_profile = $check_against'>true</xsl:if>
    </xsl:template>

ここで実行できます(出力ソースを参照してください-1人のアクティブな従業員、1人が終了しました)。

于 2012-06-20T22:32:29.420 に答える