xsl-list
[Top] [All Lists]

Re: Recursion (I think)

2005-09-25 19:32:11
It's ok I've figured it out I think.

I've used a set of templates that call each other and work their way down the list, and use parameters to keep the id and name fields that I need. I think it works, and I'll test it on some bigger data sets and see how I go.

Cheers,
Nick


    <xsl:template name="GROUPS">
        <xsl:param name="Layoutid" />
        <xsl:param name="Layoutname" />
        <xsl:for-each select="./Object[(_at_)type='Field']">
            <xsl:call-template name="RESULTSET">
                <xsl:with-param name="Layoutid" select="$Layoutid"/>
<xsl:with-param name="Layoutname" select="$Layoutname"/>
            </xsl:call-template>
        </xsl:for-each>
<xsl:for-each select="./Object[(_at_)type='GroupButton']/ GroupButtonObj">
            <xsl:call-template name="GROUPS">
                <xsl:with-param name="Layoutid" select="$Layoutid"/>
<xsl:with-param name="Layoutname" select="$Layoutname"/>
            </xsl:call-template>
        </xsl:for-each>
    </xsl:template>

On 26/09/2005, at 9:04 AM, Nicholas Orr wrote:

I'm very new to XSL and learning by doing, so thanks in advance for responding. I've got some xml which has come out of a filemaker database where you can have a layoutobject that contains either field objects or other layoutobjects in a recursive style list :

<FMPReport link="Summary.xml" type="Report" creationDate="25/09/2005" creationTime="9:28:42 PM">
    <File name="DDR Sample.fp7" path="/Volumes/BIGHD/Projects/DDR">
        <LayoutCatalog>
            <Layout id="2" name="Layout #2" includeInMenu="True">
<Object type="GroupButton" flags="0" portal="-1" rotation="0">
                    <GroupButtonObj numOfObjs="14">
<Object type="GroupButton" flags="0" portal="-1" rotation="0">
                            <GroupButtonObj numOfObjs="6">
<Object type="Field" flags="0" portal="-1" rotation="0">
                                </Object>
                            </GroupButtonObj>
                        </Object>
                    </GroupButtonObj>
                </Object>
<Object type="GroupButton" flags="0" portal="-1" rotation="0">
                    <GroupButtonObj numOfObjs="6">
<Object type="Field" flags="0" portal="-1" rotation="0">
                        </Object>
                    </GroupButtonObj>
                </Object>
<Object type="Field" flags="0" portal="-1" rotation="0">
                </Object>
            </Layout>
        </LayoutCatalog>
    </File>
</FMPReport>

I'm trying to run a for-each loop on all of the field objects that does :

 <xsl:value-of select="./@type"/>

and I can do this fine for any field object at the lowest point in the tree by referring to it explicity:

/FMPReport/File/LayoutCatalog/Layout/Object[(_at_)type='Field']

which means I can also then reference the parent "Layout" node using :

<xsl:value-of select="../../@id"/>

the problem I have is how do I reference every possible Object [(_at_)type='Field'] in the tree and still be able to reference the parent Layout node?

Thanks,
Nick

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