2012-01-16 9 views
0

私が解決できると思うそれぞれの新しい問題は、私ができないことが判明します。 したがって、次のXMLでは、異なる@num属性を持つノードがいくつあるか知りたいと思います。おそらく、望んだ出力を見て理解しやすいでしょう。xslt1.0(firefox):異なる値のノードをカウントする、muenchian-grouping?

初期XMLコード

<data> 
    <prot seq="AAA"> 
     <node num="2">1345</node> 
     <node num="2">11245</node> 
     <node num="2">112w45</node> 
     <node num="7">88885</node> 
    </prot> 
    <prot seq="BBB"> 
     <node num="2">678</node> 
     <node num="2">456</node> 
     <node num="7">4w56</node> 
     <node num="7">6666</node> 
    </prot> 
    <prot seq="CCC"> 
     <node num="2">111</node> 
     <node num="2">222</node> 
     <node num="2">22w2</node> 
     <node num="7">333</node> 
     <node num="10">3433</node> 
    </prot> 
</data> 

そして望ん出力、それは

<root> 
<num>2</num> 
<num>7</num> 
<num>10</num> 
</root> 

があり、私はそれが思わとして、それは(行うことができます推測どのように多くの異なる「NUM」の表現ように常にそうであるように)。私はそれを見ることができません。

ありがとうございます!

答えて

1

私はMeunchianも新しくなっています。ここに私の解決策だ:

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" indent="yes"/> 
    <xsl:key name="dupes" match="node" use="@num"/> 
    <xsl:template match="/"> 
    <root> 
     <xsl:apply-templates select="//node[generate-id() = 
      generate-id(key('dupes', @num)[1])]"/> 
    </root> 
    </xsl:template> 

    <xsl:template match="node"> 
    <num val="{.}"> 
     <xsl:value-of select="@num"/> 
    </num> 
    </xsl:template> 
</xsl:stylesheet> 

私はxsltprocのでこれを実行すると:

~ zacharyyoung$ xsltproc so.xsl so.xml 
<?xml version="1.0"?> 
<root> 
    <num val="1345">2</num> 
    <num val="88885">7</num> 
    <num val="3433">10</num> 
</root> 

私は、キーグループから使用されているノードを示すためにval="{.}"ビットを追加しました。我々は...key('dupes', @num)[last()]......key('dupes', @num)[1]...を変更した場合、我々はここでの違いを見ることができます:対応する値(2,7,10、等...)を持つノードのグループごとに

<root> 
    <num val="22w2">2</num> 
    <num val="333">7</num> 
    <num val="3433">10</num> 
</root> 

を、各グループのlast()ノードが選択され、前述の例では最初の[1]です。

こちらがお役に立てば幸いです。

+0

はい、それです。私は同じキーグループを持っていましたが、それ以降はあいまいになってしまいました。それを点灯していただきありがとうございます! :) – Gerard

関連する問題