|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: copy nodes based on the criteria
Hi Senthil,
Please try this ...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(@Apply = '1')][not(ancestor::*[@Apply =
'1'] or descendant::*[@Apply = '1'])]" />
</xsl:stylesheet>
This stylesheet uses the identity template, plus a template for
excluding the desired elements.
On 12/7/07, Senthil Nathan <rsennat@xxxxxxxxx> wrote:
> Hi,
> Long time back I posted this and got a solution too. But I have some
> issues with that. I have also given that XSL below, which I got from this
> forum earlier.
>
> Suppose orig.xml is as below,
> <Root>
> <Parent>
> <Child1 Apply="1">
> <Value>100</Value>
> </Child1>
> </Parent>
> <sub1>
> <Parent>
> <a>
> <value>5000</value>
> </a>
> <a Apply="1">
> <value>3000</value>
> </a>
> <a Apply="7">
> <value>7000</value>
> </a>
> </Parent>
> </sub1>
> <noParent Apply="1">
> <value>1234</value>
> </noParent>
> <noParent Apply="10">
> <value>1234</value>
> </noParent>
> </Root>
>
>
> -->new.xml should be as,
> <Root>
> <Parent>
> <Child1 Apply="1">
> <Value>100</Value>
> </Child1>
> </Parent>
> <sub1>
> <Parent>
> <a Apply="1">
> <value>3000</value>
> </a>
>
> </Parent>
> </sub1>
> <noParent Apply="1">
> <value>1234</value>
> </noParent>
> </Root>
>
> XSL----->
> <?xml version="1.0" encoding="UTF-8" ?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:x="http://www.w3.org/1999/xhtml"
> xmlns:exslt="http://exslt.org/common"
> xmlns:str="http://exslt.org/strings"
> xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="x">
>
> <xsl:template match="/">
> <xsl:comment>Matched root node template</xsl:comment>
> <xsl:apply-templates />
> </xsl:template>
>
> <xsl:template match="//*[not(@Apply)]">
> <xsl:comment>Matched "element without Apply attribute" template</xsl:comment>
> <xsl:copy>
> <xsl:copy-of select="@*" />
> <xsl:apply-templates />
> </xsl:copy>
> </xsl:template>
>
> <xsl:template priority="2.0" match="//*[@Apply='1']">
> <xsl:comment>Matched "element with Apply attribute = 1"
> template</xsl:comment>
> <xsl:copy>
> <xsl:copy-of select="@*" />
> <xsl:apply-templates />
> </xsl:copy>
> </xsl:template>
>
> <xsl:template match="//*[@Apply]">
> <xsl:comment>Matched "element with Apply attribute that has some
> other value" template</xsl:comment>
> </xsl:template>
>
> </xsl:stylesheet>
>
> How can I select only the nodes with "Apply=1", drop everything else
> like, apply=0 or any value and even if apply attribute is not there at
> all. I need to still maintain the hierarchy. eg. Parent, sub1 etc did
> not have apply attribute at all. But that has to be preserved, because
> thats the hierarchy.
>
> Thanks
> Senthil
--
Regards,
Mukul Gandhi
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








