出力が以下に示す目的の出力と一致するように、次の xsl を変更しようとしています。家族のイニシャルの名でアルファベット順にレコードを並べ替えようとしています。ただし、現時点では、作成者のイニシャルでのみ並べ替えられます。レコードに作成者の要素がない編集者のイニシャルを含める必要があります。
XML:
<records>
<record>
<creators>
<item>
<name>
<family>Smith</family>
<given>Tim</given>
</name>
</item>
</creators>
</record>
<record>
<creators>
<item>
<name>
<family>Lambert</family>
<given>John</given>
</name>
</item>
</creators>
<editors>
<item>
<name>
<family>testEDITOR</family>
<given>Bob</given>
</name>
</item>
</editors>
</record>
<record>
<editors>
<item>
<name>
<family>ZambertEDITOR</family>
<given>Bob</given>
</name>
</item>
</editors>
</record>
XSL:
<xsl:key name="initial" match="record" use="substring(creators/item/name/family,1,1)"/>
<xsl:template match="/">
<xsl:for-each select="//record[generate-id(.)= generate-id(key('initial', substring(creators/item/name/family,1,1))[1])]">
<xsl:sort select="substring(creators/item/name/family,1,1)"/>
<xsl:for-each select="key('initial', substring(creators/item/name/family,1,1))">
<xsl:if test="position() = 1">
<br /><h3 class="border">
<xsl:value-of select="substring(creators/item/name/family,1,1)"/>
</h3>
</xsl:if>
<p>
<xsl:value-of select="creators/item/name/family"/>
</p>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
望ましい出力:
L
Lambert
S
Smith
Z
ZambertEDITOR