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


Fri Nov 27 12:24:06 CST 2009


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>




More information about the oXygen-user mailing list