|
Subject: RE: [xsl] new: how to change value of attributes From: "ivanmacculi\@libero\.it" <ivanmacculi@xxxxxxxxx> Date: Wed, 25 Nov 2009 20:18:40 +0100 |
thanks Michael Kay, i have appreciated your very important valued. i use XSL
for my work, i 've studied XML with books of Scott Means e Rusty Harold and
XSL with that one of van Otegem, but i don't understand what you wrote. Where
can i find something about Xpath expression? in the site of W3C, for example,
i cant' find what does ^ mean and f:index-of-node too. Can you explane me?
Thank you a lot.
> > <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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] new: how to change value , Michael Kay | Thread | RE: [xsl] new: how to change value , ivanmacculi\@libero\ |
| Re: [xsl] XSLT/XSL-FO: How to get a, Tony Graham | Date | [xsl] XSLT filter syntax advice?, Doug Meade |
| Month |