Subject: Re: [xsl] XPath and recursion From: "Jonny Pony" <jonnypony666@xxxxxxxxxxx> Date: Thu, 23 Oct 2003 13:29:04 +0000 |
My desired output: <script> aux1 = insFld(foldersTree, gFld("DB Objects")) aux2 = insFld(aux1, gFld("Andreas")) aux3 = insFld(aux2, gFld("Peter")) aux4 = insFld(aux3, gFld("Kempten")) ... </script>
But without<xsl:output method="text"/>. it produces: <script> <document> aux1 = insFld(foldersTree, gFld("DB Objects")) aux2 = insFld(aux1, gFld("Andreas")) aux3 = insFld(aux2, gFld("Peter")) aux4 = insFld(aux3, gFld("Kempten")) ... </document> </script>
I call the templates like this right now: <script> <xsl:apply-templates select="node()"/> </script>
Thanks Jonny
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] XPath and recursion Date: Thu, 23 Oct 2003 00:52:54 -0700 (PDT)
> I've got an xml-file, something like this: > > <?xml version="1.0" encoding="UTF-8"?> > <document> > <node value1="DB Objects"> > <node value1="Andreas"> > <node value1="Peter"> > <node value1="Kempten"/> > <node value1="Ulperting"/> > </node> > <node value1="Muahhh"/> > <node value1="Christoph"> > <node value1="Ulperting"/> > <node value1="FrankyBoy"> > <node value1="Munich"/> > </node> > </node> > </node> > <node value1="Christoph"> > <node value1="Munich"/> > <node value1="FrankyBoy"> > <node value1="Kempten"/> > </node> > </node> > <node value1="Frank"/> > </node> > <node value1="Tables"> > <node value1="Andreas"> > <node value1="Peter"> > <node value1="Munich"/> > <node value1="Ulperting"/> > </node> > </node> > ... > </node> > </document> > > And I want to get an output like this after the xsl transformation: > > aux1 = insFld(foldersTree, gFld("DB-Objects")) > aux2 = insFld(aux1, gFld("Andreas",)) > aux3 = insFld(aux2, gFld("Peter")) > aux4 = insFld(aux3, gFld("Kempten")) > aux4 = insFld(aux3, gFld("Ulperting")) > aux3 = insFld(aux2, gFld("Muahhh")) > aux3 = insFld(aux2, gFld("Christoph")) > aux4 = insFld(aux3, gFld("FrankyBoy")) > aux5 = insFld(aux4, gFld("Munich")) > aux5 = insFld(aux4, gFld("FrankyBoy")) > aux6 = insFld(aux5, gFld > ("Kempten")) > aux6 = insFld(aux5, gFld > ("Kempten")) > aux2 = insFld(aux1, gFld("Christoph")) > aux2 = insFld(aux1, gFld("Frank")) > aux3 = insFld(aux2, gFld("Peter")) > aux4 = insFld(aux3, gFld("Ulperting")) > aux3 = insFld(aux2, gFld("Muahhh")) > aux3 = insFld(aux2, gFld("Christoph")) > aux4 = insFld(aux3, gFld("Ulperting")) > aux4 = insFld(aux3, gFld("FrankyBoy")) > aux5 = insFld(aux4, gFld("Munich")) > aux1 = insFld(foldersTree, gFld("Tables")) > aux2 = insFld(aux1, gFld("Andreas",)) > aux3 = insFld(aux2, gFld("Peter")) > aux4 = insFld(aux3, gFld("Kempten")) > aux3 = insFld(aux2, gFld("Christoph")) > aux4 = insFld(aux3, gFld("Munich")) > aux4 = insFld(aux3, gFld("Ulperting")) > > The idea behind that: > if /document has at least a child, write: > aux1 = insFld(foldersTreeview, gFld( "<xsl:value-of > select="@value1"/> ")); > if the child got at least another child,write: > aux2 = insFld(aux1, gFld("<xsl:value-of select="@value1"/> "); > if the child of the child got at least another child,write: > aux3 = insFld(aux2, gFld("<xsl:value-of select="@value1"/> "); > and so on.... > > I tried to solve this problem for a long time now, but falways failed. > Also the numbering of "aux", the deeper i get into the node-tree, is > impossibly for me. Have no clue how I would do that.
This transformation:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="vQ">"</xsl:variable>
<xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template>
<xsl:template match="node"> <xsl:variable name="vDepth" select="count(ancestor::node) + 1"/> <xsl:value-of select="concat('aux', $vDepth, ' = insFld(')"/>
<xsl:choose> <xsl:when test="$vDepth = 1">foldersTree</xsl:when> <xsl:otherwise> <xsl:value-of select="concat('aux', $vDepth - 1)"/> </xsl:otherwise> </xsl:choose>
<xsl:value-of select="concat(', gFld(', $vQ, @value1, $vQ, '))')"/>
<xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
when applied on your source.xml:
<document> <node value1="DB Objects"> <node value1="Andreas"> <node value1="Peter"> <node value1="Kempten"/> <node value1="Ulperting"/> </node> <node value1="Muahhh"/> <node value1="Christoph"> <node value1="Ulperting"/> <node value1="FrankyBoy"> <node value1="Munich"/> </node> </node> </node> <node value1="Christoph"> <node value1="Munich"/> <node value1="FrankyBoy"> <node value1="Kempten"/> </node> </node> <node value1="Frank"/> </node> <node value1="Tables"> <node value1="Andreas"> <node value1="Peter"> <node value1="Munich"/> <node value1="Ulperting"/> </node> </node> </node> </document>
produces the wanted result:
aux1 = insFld(foldersTree, gFld("DB Objects")) aux2 = insFld(aux1, gFld("Andreas")) aux3 = insFld(aux2, gFld("Peter")) aux4 = insFld(aux3, gFld("Kempten")) aux4 = insFld(aux3, gFld("Ulperting"))
aux3 = insFld(aux2, gFld("Muahhh")) aux3 = insFld(aux2, gFld("Christoph")) aux4 = insFld(aux3, gFld("Ulperting")) aux4 = insFld(aux3, gFld("FrankyBoy")) aux5 = insFld(aux4, gFld("Munich"))
aux2 = insFld(aux1, gFld("Christoph")) aux3 = insFld(aux2, gFld("Munich")) aux3 = insFld(aux2, gFld("FrankyBoy")) aux4 = insFld(aux3, gFld("Kempten"))
aux2 = insFld(aux1, gFld("Frank"))
aux1 = insFld(foldersTree, gFld("Tables")) aux2 = insFld(aux1, gFld("Andreas")) aux3 = insFld(aux2, gFld("Peter")) aux4 = insFld(aux3, gFld("Munich")) aux4 = insFld(aux3, gFld("Ulperting"))
===== Cheers,
Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL
__________________________________ Do you Yahoo!? The New Yahoo! Shopping - with improved product search http://shopping.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XPath and recursion, Dimitre Novatchev | Thread | Re: [xsl] XPath and recursion, Dimitre Novatchev |
Re: [xsl] Getting Entity File Names, Betty Harvey | Date | Re: [xsl] XPath and recursion, Dimitre Novatchev |
Month |