|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: new: how to change value of attributes
> <xsl:template match="mets:div/@LABEL[matches(., '^Pagina [0-9]+$')]">
> <xsl:variable name="n">
> <xsl:number level="any" count="mets:div[@LABEL[matches(., '^Pagina
[0-9]+$')]]"/>
> </xsl:variable>
> <xsl:attribute name="LABEL" select="concat('Carta ',
if ($n mod 2 = 0) then concat(($n + 1) idiv 2, 'v') else
concat(($n + 1) idiv 2, 'r'))"/>
> </xsl:template>
>
The redundancy of repeating the whole pattern is pretty horrible, both for
performance and for maintenance.
An idiom I have used in such cases is:
<xsl:variable name="g" select="//mets:div[matches(@LABEL, '^Pagina
[0-9]+$')]"/>
<xsl:template match="*[. intersect $g]/@LABEL">
<xsl:variable name="n" select="f:index-of-node($g, .)"/>
where
<xsl:function name="f:index-of-node" as="xs:integer*">
<xsl:param name="nodes" as="node()*"/>
<xsl:param name="node" as="node()"/>
<xsl:for-each select="$nodes">
<xsl:sequence select="position()[current() is $node]"/>
</xsl:for-each>
</xsl:function>
which still isn't ideal, but it feels a bit better.
Regards,
Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






