Subject: RE: [xsl] Re: Flat -> Hierarchy --- Continue From: Dongling Ding <dling61@xxxxxxxxx> Date: Fri, 30 May 2003 18:33:01 -0700 (PDT) |
Lars, I works fine except for the following line: <xsl:variable name="next-is-child" select= "//hierarchy/node[parent = Label and child = $next/Label]" /> The expression "parent = Label and child = $next/Label" doesn't work. I have to assign them to variables first: xsl:variable name="valueOfParent" select="Label"/> <xsl:variable name="valueOfChild" select="$next/Label"/> Is this XPath's problem? Thanks a lot Dongling --- Lars Huttar <lars_huttar@xxxxxxx> wrote: > Dongling Ding wrote: > > Hi Lars, > > > > I tried to use the recursive way to generate > hierarchy > > structure. The example I have is to generate > hierarchy > > by recursively call template itself without > looking at > > if it's sibling or child. So the structure would > be: > > > > <A> > > <B> > > <C/> > > </B> > > </A> > > > > However, my case is when I get a node I have to > look > > at another table(the list of nodes containing > parent > > and child elements) to see if this node is sibling > or > > child. > > > > > > <xsl:template match="/doc"> > > > > <xsl:call-template name="level"> > > <xsl:with-param name="node" > select="/doc/Node[1]"/> > > </xsl:call-template> > > > > </xsl:template> > > > > > > <xsl:template name="level"> > > <xsl:param name="node"/> > > > > <xsl:variable name="n" > > select="normalize-space($node)"/> > > <xsl:element name="{$n}"> > > > > <xsl:if test="$node/following::Node"> > > ***** Here I have to look at another set of > > **** elements > > **** to decide if the current node is seiling or > *** > > child. If it is seiling, not call the template. > > > > <xsl:call-template name="level"> > > <xsl:with-param name="node" > > select="$node/following::Node"/> > > </xsl:call-template> > > > > </xsl:if> > > > > </xsl:element> > > > > </xsl:template> > > > > > > So, how can I look at another set of elments. Or > just > > like call a function with two parameters and > return > > value is boolean in XSLT? > > Sure, you could do that... in XSLT 1.0, you'd have > to > call a template, and the value wouldn't be boolean > as > such, but it could be a string that evaluates to > true() > or false() in a boolean context (depending on > whether its length > is positive or zero). > > But it would probably be simpler to use an inline > XPath test, > as follows, than to call the above template with > parameters. > > Anyway, here would be my solution, assuming your > input XML > document is something like > <doc> > <Members> > <Member>...</Member> > ... > </Members> > <hierarchy> > ... > </hierarchy> > </doc> > > > <xsl:template match="/doc"> > <xsl:apply-templates > select="/doc/Members/Member[1]"/> > </xsl:template> > > <xsl:template match="Member"> > > <xsl:variable name="next" > select="following-sibling::Member[1]" /> > <xsl:variable name="next-is-child" select= > "//hierarchy/node[parent = Label and child = > $next/Label]" /> > > <xsl:variable name="n" > select="normalize-space(Label)"/> > > <xsl:element name="{$n}"> > <!-- If next Member is child of current Member, > process it inside > this result element. --> > <xsl:if test="$next-is-child"> > <xsl:apply-templates select="$next" /> > </xsl:if> > </xsl:element> > > <!-- If next Member is not child of current > Member, process it outside > the above result element. --> > <xsl:if test="not($next-is-child)"> > <xsl:apply-templates select="$next" /> > </xsl:if> > </xsl:template> > > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > __________________________________ Do you Yahoo!? Yahoo! Calendar - Free online calendar with sync to Outlook(TM). http://calendar.yahoo.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Re: Flat -> Hierarchy ---, Lars Huttar | Thread | RE: [xsl] Re: Flat -> Hierarchy ---, Passin, Tom |
[xsl] #include for XML?, Jason Varsoke | Date | Re: [xsl] Schema restriction betwee, Colin Paul Adams |
Month |