xsl-list
[Top] [All Lists]

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

2009-11-27 13:11:54
I'm not sure in what sense "Pagina 59" is the first in your list - your
input and output lists don't seem to correspond. But you can of course
remove the first in the list by changing the variable from

<xsl:variable name="g" select="//mets:div[matches(@LABEL, '^Pagina
[0-9]+$')]"/>

to

<xsl:variable name="g" select="remove(//mets:div[matches(@LABEL, '^Pagina
[0-9]+$')], 1)"/>

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay 

 

-----Original Message-----
From: ivanmacculi(_at_)libero(_dot_)it 
[mailto:ivanmacculi(_at_)libero(_dot_)it] 
Sent: 27 November 2009 13:41
To: XSL user
Subject: [xsl] how to change the values of a list of 
attribute excluding one or more of these.

Yesterday i asked you how to change the values of a 
enumerated list of attributes building the string of the new 
values: the list is something like this:

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


Mickael Kay suggested:


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

where

<xsl:function name="f:index-of-node" as="xs:integer*"> 
<xsl:param name="nodes" as="node()*"/> <xsl:param name="node" 
as="node()"/> <xsl:for-each select="$nodes"> <xsl:sequence 
select="position()[current() is $node]"/> </xsl:for-each> 
</xsl:function>

to transform that one in this new list:


 <mets:div LABEL="Canto XI" ORDER="13" ORDERLABEL="1">
                    <mets:div LABEL="Carta [59r]" ORDER="1" 
ORDERLABEL="113">
                        <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>

i forgot to ask you how to exclude from the transformation 
the first one of the list, in this case:

<mets:div LABEL="Pagina 59">
<mets:fptr FILEID="file.00116"/>
</mets:div>

is it possible? thx.


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



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