[oXygen-user] how to change value of attributes

George Cristian Bina
Wed Nov 25 10:54:37 CST 2009


Hi,

It is not very clear from your description what is the algorithm to 
compute the new values. Assuming that you want those values only on the 
level 3 div elements and they will continue with carta 3r, carta 3v, 
carta 4r, etc. then something like below should do it:


   <xsl:template match="node() | @*">
     <xsl:copy>
       <xsl:apply-templates select="node() | @*"/>
     </xsl:copy>
   </xsl:template>

   <xsl:template match="/mets:div/mets:div/mets:div">
     <xsl:copy>
       <xsl:apply-templates select="@*"/>
       <xsl:attribute name="LABEL">
         <xsl:text>Carta </xsl:text>
         <xsl:variable name="index" 
select="count(preceding::mets:div[parent::mets:div/parent::mets:div])"/>
         <xsl:value-of select="($index - $index mod 2) div 2 + 1"/>
         <xsl:value-of select="if ($index mod 2 = 0) then 'r' else 'v'"/>
       </xsl:attribute>
       <xsl:apply-templates select="node()"/>
     </xsl:copy>
   </xsl:template>

Best Regards,
George
-- 
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com

 wrote:
> Hi all, i'm a librarian with a problem: i've to change the value of attribute for each element of a group that i'm not able to select and count.
> i've something like this:
> 
> <mets:div LABEL="Testo" ORDER="4" ORDERLABEL="1">
>     <mets:div LABEL="Frontespizio" ORDER="1" ORDERLABEL="1">
>         <mets:div LABEL="Pagina 5" ORDER="1" ORDERLABEL="5">
>              <mets:fptr FILEID="file.00008"/>
>          </mets:div>
>      </mets:div>
>      <mets:div LABEL="Dedica" ORDER="2" ORDERLABEL="1">
>         <mets:div LABEL="Pagina 6" ORDER="1" ORDERLABEL="6">
>              <mets:fptr FILEID="file.00009"/>
>         </mets:div>
>      </mets:div>
>      <mets:div LABEL="Canto I" ORDER="3" ORDERLABEL="1">
>         <mets:div LABEL="Pagina 7" ORDER="1" ORDERLABEL="7">
>               <mets:fptr FILEID="file.00010"/>
>         </mets:div>
>         <mets:div LABEL="Pagina 8" ORDER="2" ORDERLABEL="8">
>                <mets:fptr FILEID="file.00011"/>
>         </mets:div>
>         <mets:div LABEL="Pagina 9" ORDER="3" ORDERLABEL="9">
>                 <mets:fptr FILEID="file.00012"/>
>         </mets:div> 
>       </mets:div>
> </mets:div> 
> 
> i have to change the value of LABEL from "pagina 5, pagina 6, pagina 7, pagina 8, etc..." to "carta 1r, carta 1v, carta 2r, carta 2v, etc".
> It will be something like this:  
> 
> <mets:div LABEL="Testo" ORDER="4" ORDERLABEL="1">
>     <mets:div LABEL="Frontespizio" ORDER="1" ORDERLABEL="1">
>         <mets:div LABEL="Carta 1r" ORDER="1" ORDERLABEL="5">
>              <mets:fptr FILEID="file.00008"/>
>          </mets:div>
>      </mets:div>
>      <mets:div LABEL="Dedica" ORDER="2" ORDERLABEL="1">
>         <mets:div LABEL="Carta 1v" ORDER="1" ORDERLABEL="6">
>              <mets:fptr FILEID="file.00009"/>
>         </mets:div>
>      </mets:div>
>      <mets:div LABEL="Canto I" ORDER="3" ORDERLABEL="1">
>         <mets:div LABEL="Carta 2r" ORDER="1" ORDERLABEL="7">
>               <mets:fptr FILEID="file.00010"/>
>         </mets:div>
>         <mets:div LABEL="Carta 2v" ORDER="2" ORDERLABEL="8">
>                <mets:fptr FILEID="file.00011"/>
>         </mets:div>
>         <mets:div LABEL="Carta 3r" ORDER="3" ORDERLABEL="9">
>                 <mets:fptr FILEID="file.00012"/>
>         </mets:div> 
>       </mets:div>
> </mets:div>
> 
> thanks a lot to everyone. 
> 
> 
> 
> _______________________________________________
> oXygen-user mailing list
> 
> http://www.oxygenxml.com/mailman/listinfo/oxygen-user



More information about the oXygen-user mailing list