2012-02-23 4 views
2

私はXSLを初めて使用していますが、xmlタグのデータを読み込んでそれを配列などに格納してから、明確なオプションを使用してください。ループ内のエントリを読み取ってXSLを使用して重複したエントリを削除する

例えば、

<local> 
    <ID> 
    <fruit>apple</fruit> 
    <fruit>orange</fruit> 
    </ID> 
    <ID> 
    <fruit>apple</fruit> 
    <fruit>mango</fruit> 
    </ID> 
</local> 

これでは、私はループのイニシエータとしてローカルを読んでおり、その下のすべてのIDを読み込んで果物を表示する必要があります。この場合、4つの異なるフルーツがあり、1つは複製されていないので、それらのユニークなエントリを表示したいだけです。 XSLTを使ってこれを行う可能性はありますか?

<xsl:for-each select="Local"> 
    <xsl:variable name="fruits"> 
    <xsl:for-each select="set:distinct(ID/fruit)"> 
     <xsl:copy-of select="."/> 
    </xsl:for-each> 
    </xsl:variable> 
</xsl:for-each> 

答えて

0

I.このXSLT 1.0変換

<local> 
    <ID> 
     <fruit>apple</fruit> 
     <fruit>orange</fruit> 
    </ID> 
    <ID> 
     <fruit>apple</fruit> 
     <fruit>mango</fruit> 
    </ID> 
</local> 

が望む正しい結果を生成する:提供されるXML文書に塗布

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

<xsl:key name="kFruitByName" match="fruit" use="."/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "/*/*/fruit 
    [generate-id() 
    = 
     generate-id(key('kFruitByName', .)[1]) 
    ]"/> 
</xsl:template> 
</xsl:stylesheet> 

<fruit>apple</fruit> <fruit>orange</fruit> <fruit>mango</fruit> 

説明Muenchian method for groupingを使用します。


II。 XSLT 2.0のソリューション

<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="/*"> 
    <xsl:for-each-group select="*/fruit" group-by="."> 
    <xsl:sequence select="."/> 
    </xsl:for-each-group> 
</xsl:template> 
</xsl:stylesheet> 

この変換は、(上記)と同じXML文書に適用されたときに、再び同じ正しい結果が生成されます

<fruit>apple</fruit> 
<fruit>orange</fruit> 
<fruit>mango</fruit> 
+0

はあなたにDimitreをありがとう、しかし、私はしたいですUIのみで値を表示して、私が試したときに、正確な結果を得ることができないようにしました。予想通り。それはそこにヌル値として表示され、出力は表示されません。 – user1227273

+0

こんにちはDimitre、私はコンセプトを得ましたが、今は私の問題です。 <ローカルID = "1" タイプ= "プライマリ"> - <要約日= "23-02-12"> - リンゴ - オレンジ <ローカルID = "2"タイプ= "プライマリ"> - <要約日= "23-02-12"> - リンゴ - マンゴー は、したがって、この場合には、私はローカルに取得することができますよデータを読み取ることはできません。あなたは私を助けてくれますか? – user1227273

+0

@ user1227273:質問を編集するか、新しい質問をしてください。コメントはコードの書式設定には便利ではありません。また、最後のコメントのthextは整形式のXML文書ではありません。正確な結果を提供する必要があります - それはノードのコピーであるか、テキストのみ、またはHTMLでなければなりません。 –

関連する問題