RE: [xsl] Deleting a node depending on contents of a grandfather attribute and a child node

Subject: RE: [xsl] Deleting a node depending on contents of a grandfather attribute and a child node
From: "Dion Houston" <dionh@xxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 30 Jul 2003 13:48:17 -0700
Hey John:

Keep in mind in XSLT that you don't delete nodes, you fail to copy them
to the output tree.  This is more than a semantic distinction, as it
suggests a different approach.

What you should do here is move the logic of whether to copy the nodes
to the appropriate parent and then apply templates on those nodes...
i.e.

<xsl:template match="/"> <!-- if this is the parent of parent nodes -->
   <xsl:apply-templates select="parent[@pword=$varpword]"/>
</xsl:template>

<xsl:template match="absentia">
   <xsl:copy>
      <xsl:apply-templates select="absent[from=$vardate]"/>
   </xsl:copy>
</xsl:template>

HTH!

Dion

-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of John Reid
Sent: Wednesday, July 30, 2003 1:27 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] Deleting a node depending on contents of a grandfather
attribute and a child node

Could I put this q up again?
:o)
i have tried a number of approaches but with various but not correct
results. I want to delete the absent node (and everything below it)
where $vardate = from and @pword $varpword.

Starting with:
<player pword='82345'>
<absentia>
<absent type="C">
	<to>20030921</to>
	<from>20030901</from>
</absent>
<absent type="D">
	<to>20030801</to>
	<from>20030103</from>
</absent>
</absentia>
<player>

ending with:
<player pword='82345'>
<absentia>
<absent type="D">
	<to>20030801</to>
	<from>20030103</from>
</absent>
</absentia>
<player>

tried this (along with about 10 variations):

<xsl:param name="vardate" select="0" />
<xsl:param name="varpword" select="0" />

<xsl:template match="@*|node()">
<xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="absent">
    <xsl:variable name="date1" select="./from"/>
    <xsl:variable name="pword" select="ancestor::@pword"/>
    <xsl:copy>
      <xsl:apply-templates select="@*|node()[not($date1 = $vardate and
$pword = $varpword)]"/>
  </xsl:copy>
</xsl:template>


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread