xsl-list
[Top] [All Lists]

[xsl] copy nodes based on the criteria

2007-12-07 09:30:35
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="//*[(_at_)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="//*[(_at_)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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

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