Subject: RE: Copying and updating selectively
From: Américo Albuquerque <melinor@xxxxxxx>
Date: Sat, 26 Jul 2003 14:23:53 +0100
|
Hi
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of John Reid
> Sent: Saturday, July 26, 2003 11:49 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: Copying and updating selectively
>
>
> Um some small changes, but still no result. The first
> apply-template gets applied, does it then apply itself
> recursively,without falling thru to the next apply-template?
> If so does the copy statement build a structure that is then
> applied once the recursion ends??
>
> <xsl:template match="player/dates">
> <xsl:copy>
> <xsl:apply-templates
> select="@*|node()[not(../@pword=$varPMKey)]"/>
> <xsl:apply-templates select="@*|node()[yes/@ID < $varFrom]"/>
> <xsl:apply-templates select="@*|node()[yes/@ID >
> $varTo]"/> </xsl:copy> </xsl:template>
>
> g'day,
>
> i got so far with this and then came up empty. I want to
> update/copy a xml file updating any yes node to null (i guess
> deleting the text node is the better way to put it). So that
> i start with ONE and end with TWO on the condition that the
> @ID date is within the two date parameters. The code at the
> bottom is my starting attempt. The two date parameters are
> $varFrom=20030806 and $varTo=20030814
>
> any thoughts
>
> salud John Reid
This is a variation of the identity template. Copy all nodes and change just
that you want to change
<xsl:param name="varFrom" select="'20030809'"/>
<xsl:param name="varTo" select="'20030812'"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="yes">
<!-- this variable is been used as a shortcut to current()/@ID in the
select statement -->
<xsl:variable name="id" select="@ID"/>
<xsl:copy>
<!-- here I'm sellecting all non text nodes, all text nodes if the
current node ID attribute is not between $varFrom and $varTo and all
attribute nodes -->
<xsl:apply-templates select="node()[not(self::text())] |
text()[not($id >= $varFrom and $id <= $varTo)] | @*"/>
</xsl:copy>
</xsl:template>
Applied to (the A's is to see if those nodes get copied or not):
<player>
<dates>
<yes ID="20030722" WE="Tu">A</yes>
<yes ID="20030729" WE="Tu">A</yes>
<yes ID="20030805" WE="Tu">A</yes>
<yes ID="20030809" WE="Sa">D</yes>
<yes ID="20030810" WE="Su">D</yes>
<yes ID="20030812" WE="Tu">D</yes>
<yes ID="20030819" WE="Tu">A</yes>
<yes ID="20030826" WE="Tu">A</yes>
</dates>
</player>
Will give this result (no D's):
<player>
<dates>
<yes ID="20030722" WE="Tu">A</yes>
<yes ID="20030729" WE="Tu">A</yes>
<yes ID="20030805" WE="Tu">A</yes>
<yes ID="20030809" WE="Sa"/>
<yes ID="20030810" WE="Su"/>
<yes ID="20030812" WE="Tu"/>
<yes ID="20030819" WE="Tu">A</yes>
<yes ID="20030826" WE="Tu">A</yes>
</dates>
</player>
(...)
Regards,
Américo Albuquerque
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|