|
Subject: RE: [xsl] select descendant problem From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 10 Oct 2008 20:21:39 +0100 |
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.kapro@xxxxxxxx]
> Sent: 10 October 2008 19:00
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> 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[@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
>
>
>
> __________________________________________________________
> Ger det lengsamt? Skaffa dig en snabbare bredbandsuppkoppling.
> Svk och jdmfvr priser hos Kelkoo.
> http://www.kelkoo.se/c-100015813-bredband.html?partnerId=96914325
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] select descendant problem, G. Ken Holman | Thread | Re: [xsl] Tricky XSLT 2.0 grouping , G. Ken Holman |
| Re: [xsl] select descendant problem, G. Ken Holman | Date | [xsl] document tree fragments, Joe Barwell |
| Month |