xsl-list
[Top] [All Lists]

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

2009-11-27 13:24:31

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>


--~------------------------------------------------------------------
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>
  • [xsl] new2: how to change the values of a list of attribute excluding one or more of these., ivanmacculi\(_at_)libero\(_dot_)it <=