xsl-list
[Top] [All Lists]

RE: Copying and updating selectively

2003-07-26 06:23:53
Hi

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
John Reid
Sent: Saturday, July 26, 2003 11:49 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] 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 &lt; $varFrom]"/>
    <xsl:apply-templates select="@*|node()[yes/@ID &gt; 
$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 &gt;= $varFrom and $id &lt;= $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



<Prev in Thread] Current Thread [Next in Thread>