2016-12-19 9 views
0

<xsl:sequence>を使用して重複を削除するXSLバージョン2.0があります。私はIDの下のxmlベースから重複したEntry要素を削除するだけです。さらに、私は日付フィールドを考慮し、古いフィールドを削除する必要があります。代わりに、私は現在の日付ではないものを削除することができます。なぜなら、新しいEntryは常に現在の日付としてスタンプされているからです。この場合、2016-09-01(太字)のIDエイリアスエントリを削除します。気にして、私は日付に関係なく、dupではないエントリを削除したくありません。あなたの助けを事前にXSLT異なる日付の重複要素のシーケンス選択のより具体的な使用

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

    <xsl:template match="/*"> 
     <Data xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
      <xsl:for-each-group select="Entry" group-by="ID"> 
       <xsl:sequence select="."/> 
      </xsl:for-each-group> 
     </Data> 
    </xsl:template> 
</xsl:stylesheet> 

ありがとう:

<?xml version='1.0' encoding='utf-8'?> 
<Data> 
    <Entry> 
     <ID>aces</ID> 
     <Info> 
      <Code2>0006</Code2> 
      <AMOUNT>7.52<AMOUNT>    
     <Info> 
     <Date>2016-12-18-05:00</Date> 
    </Entry> 
    <Entry> 
     <ID>chawk</ID> 
     <Info> 
      <Code2>0007</Code2> 
      <AMOUNT>7.53<AMOUNT>    
     <Info> 
     <Date>2016-11-01-05:00</Date> 
    </Entry> 
    **<Entry> 
     <ID>aces</ID> 
     <Info> 
      <Code2>0006</Code2> 
      <AMOUNT>7.53<AMOUNT>    
     <Info> 
     <Date>2016-09-01-05:00</Date> 
    </Entry>** 
</Data> 

は、ここに私の現在のXSLです。 (最後のソートを昇順または最初の並べ替え降順で中)の日付を出力することにより、グループ内のアイテムのみ、最新のアイテム

答えて

2

並べ替え:

<xsl:template match="/*"> 
    <Data xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <xsl:for-each-group select="Entry" group-by="ID"> 
      <xsl:for-each select="current-group()"> 
       <xsl:sort select="Date" order="descending"/> 
       <xsl:if test="position() eq 1"> 
        <xsl:copy-of select="."/> 
       </xsl:if> 
      </xsl:for-each> 
     </xsl:for-each-group> 
    </Data> 
</xsl:template> 
+0

動作します...ありがとうございます! – user1375987

関連する問題