Re: [xsl] AVT use and doc() function in xslt 2.0?

Subject: Re: [xsl] AVT use and doc() function in xslt 2.0?
From: Andrew Welch <andrew.j.welch@xxxxxxxxx>
Date: Fri, 19 Aug 2011 09:45:05 +0100
On 18 August 2011 22:00,  <dvint@xxxxxxxxx> wrote:
> Interesting idea, but I'm not sure I can appli it in the final case. I
> actually have multiple levels I need to match. This is what my code looks
> like currently:
>
> <xsl:variable name="lookup"
>
select="doc('dmcmapping.xml')/searchReplace/smodelic[@val=current()/modelic]/
ssdc[@val=current()/sdc]/schapnum[@val=current()/chapnum]/ssection[@val=curre
nt()/section]/ssubsect[@val=current()/subsect]/ssubject[@val=current()/subjec
t]/sdiscode[@val=current()/discode]/sdiscodev[@val=current()/discodev]/sincod
e[@val=current()/incode]/sincodev[@val=current()/incodev]/sitemloc[@val=curre
nt()/itemloc]/replaceWith"/>
>
> <xsl:copy-of select="$lookup/modelic"/>
> <xsl:copy-of select="$lookup/sdc"/>
> <xsl:copy-of select="$lookup/chapnum"/>
> <xsl:copy-of select="$lookup/section"/>
> <xsl:copy-of select="$lookup/subsect"/>
> <xsl:copy-of select="$lookup/subject"/>
> <xsl:copy-of select="$lookup/discode"/>
> <xsl:copy-of select="$lookup/discodev"/>
> <xsl:copy-of select="$lookup/incode"/>
> <xsl:copy-of select="$lookup/incodev"/>
> <xsl:copy-of select="$lookup/itemloc"/>
>
> What I have is one really long key stored in multiple elements and
> attributes. Now I control the lookup file format, so I might be able to
> concatenate all the values into a single key and then change my template
> accordingly.

You could change the key to be all of the @val attributes joined using a
hyphen:

match="replaceWith" use="string-join((ancestor::* except
searchReplace)/@val, '-')"

then you should be able to call using the much shorter:

key('blah', string-join((modelic,sdc,chapnum,....), ','), $doc)

which if they are in document order anyway then just:

key('blah', string-join(*, ','), $doc)

> This is for a conversion effort and ultimatley it should be throwaway
> code. I just ran the process on 127 documents/files and it ran pretty fast
> with the above.

Ironically 'throwaway' code often hangs around for long time...


--
Andrew Welch
http://andrewjwelch.com

Current Thread