特定のサブ要素を持つ重複グループ(Muenchianグループで行われたグループ)から1つの要素を選択できるようにしたいと考えています。私のXMLは次のようになります。XSLT/Muenchian grouping:グループから特定のサブ要素を持つ要素を選択する方法は?
<waybill>
<shipment>
<parcel>
<sscc>SSCC1</sscc>
<consignee>Receiver1</consignee>
</parcel>
<parcel>
<sscc>SSCC2</sscc>
<consignee>Receiver2</consignee>
<attention>Note2</attention>
</parcel>
<parcel>
<sscc>SSCC3</sscc>
<consignee>Receiver3</consignee>
</parcel>
<parcel>
<sscc>SSCC4</sscc>
<consignee>Receiver4</consignee>
</parcel>
<parcel>
<sscc>SSCC1</sscc>
<consignee>Receiver1</consignee>
<attention>Note1</attention>
</parcel>
<parcel>
<sscc>SSCC3</sscc>
<consignee>Receiver3</consignee>
<attention>Note3</attention>
</parcel>
</shipment>
</waybill>
と私のXSLTは、次のようになります。出力は次のようになります
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" version="2.0">
<xsl:output method="text" version="1.0" encoding="ISO-8859-1" indent="yes"/>
<xsl:key name="ean" match="parcel" use="sscc"/>
<xsl:template match="/">
<xsl:for-each select="/waybill/shipment/parcel[generate-id()=generate-id(key('ean',sscc))]">
<xsl:value-of select="current()/sscc"/>
<xsl:text>§</xsl:text>
<xsl:value-of select="current()/consignee"/>
<xsl:text>§</xsl:text>
<xsl:value-of select="current()/attention"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
:
SSCC1§Receiver1§
SSCC2§Receiver2§Note2
SSCC3§Receiver3§
SSCC4§Receiver4§
ので、私のXSLTは今、最初のヒットを選択しますグループ化された要素から、結果として私が望むものは次のとおりです。
SSCC1§Receiver1§Note1
SSCC2§Receiver2§Note2
SSCC3§Receiver3§Note3
SSCC4§Receiver4§
したがって、XSLTはグループからの重複を最も多く持つデータを見つける必要があります。最初または最後ではなく、特定のサブ要素を持つもの(または最終的なケースではサブサブ要素)
この場合、すべての要素にサブ要素(ここではSSCC4)が含まれているわけではなく、彼らが持っているデータと一緒に使うべきです(無視すべきではありません)。
グループ化された同様の要素から「最高の」要素を見つける正しい方法は何ですか?
すべてのヘルプは高く評価される:)