XSLを使用して重複を含むXMLファイルからアイテムの一意のリストを抽出するために、Webで利用可能な手法を興味深く読みました。
これらは2つのカテゴリに分類されます:1)Muenchianメソッド(例:http ://www.jenitennison.com/xslt/grouping/ )2)または前の兄弟ルックアップこれらは両方ともXPath式に依存してデータを選択しますグループ化する。
しかし、私が解決しようとしているXMLファイルでは、データはXMLファイルに「ネイティブに」存在していません。xsl:templateを使用して、要素からいくつかの集約データを計算しています。そして、集約されたデータに基づいてグループ化したいと思います。
たとえば、私は持っています:
<filmsreview>
<record><data name='movie'>Star Wars</data><data name='ratings'>John:Good, Mary:Good</data></record>
<record><data name='movie'>Indiana Jones</data><data name='ratings'>John:Good, Mary:Bad, Helen:Average</data></record>
<record><data name='movie'>Titanic</data><data name='ratings'>John:Bad, Helen:Good</data></record>
</filmsreview>
データの構造化が完璧ではなく、サブ要素を作成することで簡単にできることはわかっていますが、データソースを簡単に変更することはできないので、これを挑戦してみましょう。
そして、私がジョンの明確な評価を持っている要約を作りたいと思います:ジョンの評価:良い悪い
レコード要素を取得して、このレコードに対するJohnの評価を返すことができるxsl:templateがあります。例:
<xsl:template name="get_rating">
<xsl:param name="reviewer" />
<!-- I use some string manipulation, and xsl:value-of to return the review for John-->
</xsl:template>
xsl:for-eachの下で呼び出すだけで、Johnのレビューの完全なリストを取得できます。しかし、この呼び出しをどのメソッドとも組み合わせて、一意の値を取得することはできません。
XMLファイルをより構造化された方法に変換するために中間XSLを使用する必要がありますか?または、1つのステップで実行できますか?
Gerardに感謝します