これは何度も投稿されたよくある質問の 1 つであることは理解していますが、残念ながら、提案されたアプローチのいずれでも正確な解決策を見つけることができません。
私のXMLは次のようになります。
<root>
<parent>
<table>
<attr ......>
<type t="enumone">
<info>
<name .....>
</info>
</attr>
<attr>
<type t="int">
<range min="1" max="255"/>
</type>
<info>
<name .....>
</info>
</attr>
<attr>
<type t="string">
<info>
<name .....>
</info>
</attr>
<attr ......>
<type t="enumtwo">
<info>
<name .....>
</info>
</attr>
<attr>
<type t="float">
<range min="1.0" max="25.5"/>
</type>
<info>
<name .....>
</info>
</attr>
<attr>
<type t="int">
<info>
<name .....>
</info>
</attr>
<attr>
<type t="enumone">
<info>
<name .....>
</info>
</attr>
<attr>
<type t="enumthree">
<info>
<name .....>
</info>
</attr>
<attr>
<type t="enumone">
<info>
<name .....>
</info>
</attr>
</parent>
</root>
XSLT を使用して、"type" 要素から属性 "@t" の 1 つのオカレンスを取得することを意図しています。
Using for-each-group:
<xsl-template match="/root/parent">
<xsl:for-each select="table">
<xsl:for-each-group select="//type" group-by="@t">
<xsl:copy-of select="current-group( )[1]"/>
</xsl:for-each-group>
</xsl:for-each>
<xsl-template>
しかし、私は出力を得ませんでした!何か欠陥があると思います。
個別値 () の使用:
<xsl:for-each select="distinct-values(type/@t)">
<xsl:sort/>
<xsl:value-of select="."/> <xsl:call-template name="newline"/>
</xsl:for-each>
まだ望ましい出力はありません。
予想される出力は次のとおりです。
enumone
int
string
enumtwo
float
enumthree
この点で何か助けていただければ幸いです。