xsl-list
[Top] [All Lists]

RE: [xsl] new: how to change value of attributes

2009-11-25 14:19:03
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[(_at_)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




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>