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

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>
participants (1)
-
ivanmacculi@libero.it