xsl-list
[Top] [All Lists]

RE: [xsl] select descendant problem

2008-10-10 15:22:11
It rather depends on what you want to do with the nodes once you have
selected them. I suspect that you don't actually want to "select" them at
all: rather, you want to copy the part of the input tree that contains these
nodes, and not copy other parts. The way to do this is with a set of
template rules that processes (copies) the elements you are interested in,
and does something else with the others. Typically the default is to copy a
node:

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

and then you override this for nodes you want to process differently, for
example

<xsl:template match="wrapper">
  <xsl:apply-templates/>
</xsl:template>

which basically says "when you find an element, copy it and process its
children; but when you find a wrapper element, don't copy it, but still
process its children."

Michael Kay
http://www.saxonica.com/


-----Original Message-----
From: Mati Hadi [mailto:matilda(_dot_)kapro(_at_)yahoo(_dot_)se] 
Sent: 10 October 2008 19:00
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] select descendant problem

Hi Mailinglist,

I have an xml file like this:
<wrapper class=?menu?>
     <title>menu1</title>
     <section>
         <title>Indoor climate</title>
         <table> some table here</table>
         <section>
             <title> under menus</title>
             <paragraph>some text here</paragraph>
         </section>
         <wrapper class=?menu?>
             <title>menu1.1</title>
             <section>
                 <title>Temperatur</title>
                 <paragraph>some text here</paragraph>
             </section>
             <wrapper class=?menu?>
                 <title>menu1.1.1</title>
                  <section>
                      <title>Heat</title>
                      <paragraph>some text here</paragraph>
                  </section>
                  <wrapper class=?menu?>
                       <title>menu1.1.1.1</title>
                        <section>
                           <title>Heat2</title>
                            <paragraph>some text here</paragraph>
                        </section>
                  </wrapper>
             </wrapper>
         </wrapper>
     </section>
</wrapper>

I want to select all the children of the wrapper, except the 
children wrappers. I mean I want to select i.e from the first 
wrapper just title, section,section/title, section/table and 
section/section,but not the child wrapper, and from the child 
wrapper, I want to select all its children except the child 
wrapper, and so on.
I tried to write :
<xsl: for-each select=?wrapper[(_at_)class=?menu?]> 
<xsl:apply-templates 
select=*[not(descendant::wrapper[wrapper=?menue?])]/>
</xsl:for-each>
But this dos not work. Any ideas please

Thank you in advance
Matilda



      __________________________________________________________
Går det långsamt? Skaffa dig en snabbare bredbandsuppkoppling. 
Sök och jämför priser hos Kelkoo.
http://www.kelkoo.se/c-100015813-bredband.html?partnerId=96914325

--~------------------------------------------------------------------
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>
--~--



--~------------------------------------------------------------------
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>