2012-02-08 8 views
0

xmlに重複したノードを削除するXSLスタイルシートを適用したいとします。 私はいくつかのソリューションをテストが、私はそれは私のプログラムは、Visual C#メーカーである:(行うことはできませんXMLの重複ノード

私は、次のXMLを持っています。

<store> 

<laptop> 
    <ID>1</ID> 
    <price>X2</price> 
</laptop> 

<laptop> 
    <ID>2</ID> 
    <price>X1</price> 
</laptop> 

<laptop> 
    <ID>8</ID> 
    <price>X2</price> 
</laptop> 

<laptop> 
    <ID>2</ID> 
    <price>X3</price> 
</laptop> 

</store> 

は、所望の出力は次のようになります。

<store> 

    <laptop> 
     <ID>1</ID> 
     <price>X2</price> 
    </laptop> 

    <laptop> 
     <ID>8</ID> 
     <price>X2</price> 
    </laptop> 

    <laptop> 
     <ID>2</ID> 
     <price>X3</price> 
    </laptop> 

    </store> 

答えて

1

以下の解決策は、あなたが求めていることを行い、次のように動作します:

  1. 最初のテンプレートスター(ID 2が出力の最後に に来る理由)
  2. IDノードのリストをループして親を出力します) とそのすべての子供

コメントは歓迎します。これは私の最初の2年間のXSLでの試みです。 私はxsl:copyを試しましたが、子供のタグ名は含めることができませんでしたが、値が表示されたのはなぜですか?

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

の作業コード:

<xsl:stylesheet 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" 
     exclude-result-prefixes="xs"> 

    <xsl:template match="/"> 
    <store> 
    <xsl:variable name="non-duplicates" 
    select="//ID[not(.=following::ID)]" /> 

    <xsl:for-each select="$non-duplicates"> 
     <xsl:copy-of select="parent::*"/> 
    </xsl:for-each> 
    </store> 
    </xsl:template> 
</xsl:stylesheet> 
それの内容のうち、やや撮影

関連する問題