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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: template problem...ignori, John Liebermann | Thread | RE: [xsl] Deleting a node depending, John Reid |
Re: [xsl] Deleting a node depending, J.Pietschmann | Date | RE: RE: RE: [xsl] xsl:output method, cknell |
Month |