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

Subject: [xsl] 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:05:00 +0100
i've this xsl file suggested by mikael kay that doesn't works to change my xml
that follows the xsl file. the result that i wolud obtain is posted to the
end.

XSL file

<?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>

XML file

<mets:div LABEL="Canto VI" ORDER="8" ORDERLABEL="1">
<mets:div LABEL="Pagina 56">
<mets:fptr FILEID="file.00059"/>
</mets:div>
<mets:div LABEL="Pagina 57">
<mets:fptr FILEID="file.00060"/>
</mets:div>
<mets:div LABEL="Pagina 58">
<mets:fptr FILEID="file.00061"/>
</mets:div>
<mets:div LABEL="Pagina 59">
<mets:fptr FILEID="file.00062"/>
</mets:div>
<mets:div LABEL="Pagina 60">
<mets:fptr FILEID="file.00063"/>
</mets:div>
<mets:div LABEL="Pagina 61">
<mets:fptr FILEID="file.00064"/>
</mets:div>
<mets:div LABEL="Pagina 62">
<mets:fptr FILEID="file.00065"/>
</mets:div>
<mets:div LABEL="Pagina 63">
<mets:fptr FILEID="file.00066"/>
</mets:div>
<mets:div LABEL="Pagina 64">
<mets:fptr FILEID="file.00067"/>
</mets:div>
<mets:div LABEL="Pagina 65">
<mets:fptr FILEID="file.00068"/>
</mets:div>
<mets:div LABEL="Pagina 66">
<mets:fptr FILEID="file.00069"/>
</mets:div>
</mets:div>

XML that i would obtain

<mets:div LABEL="Canto XI">
<mets:div LABEL="Pagina 59">
<mets:fptr FILEID="file.00116"/>
</mets:div>
<mets:div LABEL="Carta [59v]" ORDER="2" ORDERLABEL="114">
<mets:fptr FILEID="file.00117"/>
</mets:div>
<mets:div LABEL="Carta [60r]" ORDER="3" ORDERLABEL="115">
<mets:fptr FILEID="file.00118"/>
</mets:div>
<mets:div LABEL="Carta [60v]" ORDER="4" ORDERLABEL="116">
<mets:fptr FILEID="file.00119"/>
</mets:div>
<mets:div LABEL="Carta [61r]" ORDER="5" ORDERLABEL="117">
<mets:fptr FILEID="file.00120"/>
</mets:div>
<mets:div LABEL="Carta [61v]" ORDER="6" ORDERLABEL="118">
<mets:fptr FILEID="file.00121"/>
</mets:div>
<mets:div LABEL="Carta [62r]" ORDER="7" ORDERLABEL="119">
<mets:fptr FILEID="file.00122"/>
</mets:div>
<mets:div LABEL="Carta [62v]" ORDER="8" ORDERLABEL="120">
<mets:fptr FILEID="file.00123"/>
</mets:div>
<mets:div LABEL="Carta [63r]" ORDER="9" ORDERLABEL="121">
<mets:fptr FILEID="file.00124"/>
</mets:div>
<mets:div LABEL="Carta [63v]" ORDER="10" ORDERLABEL="122">
<mets:fptr FILEID="file.00125"/>
</mets:div>
<mets:div LABEL="Carta [64r]" ORDER="11" ORDERLABEL="123">
<mets:fptr FILEID="file.00126"/>
</mets:div>
</mets:div>

Current Thread