[xsl] new2: how to change the values of a list of attribute excluding one or more of these.

Subject: [xsl] new2: how to change the values of a list of attribute excluding one or more of these.
From: "ivanmacculi\@libero\.it" <ivanmacculi@xxxxxxxxx>
Date: Fri, 27 Nov 2009 19:24:06 +0100
i confuse parts of xml, but my problem remains the same:
i want to change this XML:


<mets:div LABEL="Canto III" ORDER="5" ORDERLABEL="1">
                    <mets:div LABEL="Pagina 26" ORDER="1" ORDERLABEL="26">
                        <mets:fptr FILEID="file.00029"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 27" ORDER="2" ORDERLABEL="27">
                        <mets:fptr FILEID="file.00030"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 28" ORDER="3" ORDERLABEL="28">
                        <mets:fptr FILEID="file.00031"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 29" ORDER="4" ORDERLABEL="29">
                        <mets:fptr FILEID="file.00032"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 30" ORDER="5" ORDERLABEL="30">
                        <mets:fptr FILEID="file.00033"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 31" ORDER="6" ORDERLABEL="31">
                        <mets:fptr FILEID="file.00034"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 32" ORDER="7" ORDERLABEL="32">
                        <mets:fptr FILEID="file.00035"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 33" ORDER="8" ORDERLABEL="33">
                        <mets:fptr FILEID="file.00036"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 34" ORDER="9" ORDERLABEL="34">
                        <mets:fptr FILEID="file.00037"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 35" ORDER="10" ORDERLABEL="35">
                        <mets:fptr FILEID="file.00038"/>
                    </mets:div>
                    <mets:div LABEL="Pagina 36" ORDER="11" ORDERLABEL="36">
                        <mets:fptr FILEID="file.00039"/>
                    </mets:div>
                </mets:div>

in this XML:

 <mets:div LABEL="Canto III" ORDER="5" ORDERLABEL="1">
                    <mets:div LABEL="Carta [12v]" ORDER="1" ORDERLABEL="26">
                        <mets:fptr FILEID="file.00029"/>
                    </mets:div>
                    <mets:div LABEL="Carta [13r]" ORDER="2" ORDERLABEL="27">
                        <mets:fptr FILEID="file.00030"/>
                    </mets:div>
                    <mets:div LABEL="Carta [13v]" ORDER="3" ORDERLABEL="28">
                        <mets:fptr FILEID="file.00031"/>
                    </mets:div>
                    <mets:div LABEL="Carta [14r]" ORDER="4" ORDERLABEL="29">
                        <mets:fptr FILEID="file.00032"/>
                    </mets:div>
                    <mets:div LABEL="Carta [14v]" ORDER="5" ORDERLABEL="30">
                        <mets:fptr FILEID="file.00033"/>
                    </mets:div>
                    <mets:div LABEL="Carta [15r]" ORDER="6" ORDERLABEL="31">
                        <mets:fptr FILEID="file.00034"/>
                    </mets:div>
                    <mets:div LABEL="Carta [15v]" ORDER="7" ORDERLABEL="32">
                        <mets:fptr FILEID="file.00035"/>
                    </mets:div>
                    <mets:div LABEL="Carta [16r]" ORDER="8" ORDERLABEL="33">
                        <mets:fptr FILEID="file.00036"/>
                    </mets:div>
                    <mets:div LABEL="Carta [16v]" ORDER="9" ORDERLABEL="34">
                        <mets:fptr FILEID="file.00037"/>
                    </mets:div>
                    <mets:div LABEL="Carta [17r]" ORDER="10" ORDERLABEL="35">
                        <mets:fptr FILEID="file.00038"/>
                    </mets:div>
                    <mets:div LABEL="Carta [17v]" ORDER="11" ORDERLABEL="36">
                        <mets:fptr FILEID="file.00039"/>
                    </mets:div>
                </mets:div>

this XSL doesn't work. Why? (i obtained that result in another way, not with
this XSL).

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="#all" version="2.0"
xmlns:mets="http://www.loc.gov/METS/";	xmlns:mix="http://www.loc.gov/mix/";
xmlns:xlink="http://www.w3.org/1999/xlink";
xmlns:rd="http://cosimo.stanford.edu/sdr/metsrights/";
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:f="http://example.com/f";>


<xsl:output indent="yes" method="xml"/>

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

    <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, ..)"/>
        <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>

    <xsl:function name="f:index-of-node" as="xs:integer*">
        <xsl:param name="nodes" as="node()*"/>
        <xsl:param name="node" as="node()"/>
        <xsl:sequence select="1 to count($nodes)[subsequence($nodes, ., 1) is
            $node]"/>
    </xsl:function>

</xsl:stylesheet>

Current Thread