On 15/07/2016 20:20, dvint(_at_)dvint(_dot_)com wrote:
So I have a large document that I need to pull a list of unique values
from a given element. These are taxonomy and term tag values from a 4,000
topic collection of DITA content.
Without knowing how these are implemented, is there something I should be
able to intuit just from the spec? This is some code that I inherited and
it wouldn't have been how I would have attacked the problem:
<xsl:variable name="TermList">
<xsl:value-of select="distinct-values(.//term[not(@keyref)])"
separator=", " />
</xsl:variable>
<data type="topicreport" name="WDTermList">
<xsl:for-each select="tokenize(normalize-space($TermList), ', ')">
<xsl:sort select="." />
<xsl:value-of select="."/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each>
</data>
Another option that you could try to see how it affects memory usage [1]:
<xsl:key name="terms" match="term[empty(@keyref)]" use="true()" />
<data type="topicreport" name="WDTermList">
<xsl:value-of separator=", ">
<xsl:perform-sort select="distinct-values(key('terms', true()))">
<xsl:sort select="." />
</xsl:perform-sort>
</xsl:value-of>
</data>
(borrowing the xsl:perform-sort idea from Martin Honnen, and assuming
that the context node is the document element.)
Regards,
Tony Graham.
--
Senior Architect
XML Division
Antenna House, Inc.
----
Skerries, Ireland
tgraham(_at_)antenna(_dot_)co(_dot_)jp
[1] Unless and until Michael Kay advises that using the xsl:key instead
of '//' makes no difference in Saxon.
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--