Subject: Re: [xsl] data structure in xslt?|
From: Trevor Nash <tcn@xxxxxxxxxxxxx>
Date: Wed, 09 Oct 2002 11:46:23 +0100
On second thoughts, you first need to rethink the design of your input document. You have: ><returnType>Person</returnType> and then: ><param type="Person" name="p"/> These are the same 'Person' but you are using different markup for the two. You will find things much easier if you are consistent. I would choose an element for this kind of thing. You could rewrite your input document (adding some missing tags) as: <program> <method name="getPerson"> <returnType><type>Person</type></returnType> <params/> </method> <method name="setPerson"> <returnType/> <params> <param name="p"><type>Person</type></param> </params> </method> </program> Then, using xsl:key as suggested by others your #include is very easy: <xsl:key name="types" match="type" use="." /> <xsl:key name="types" match="type" use="'_all_'" /> <xsl:template match="/" > <xsl:for-each select="key('types', '_all_')"> <xsl:if test="count(.|key('types', .))=1"> <xsl:text>include "</xsl:text> <xsl:value-of select="." /> <xsl:text>.h"
</xsl:text> </xsl:if> </xsl:for-each> </xsl:template> Notes: "key('types', '_all_')" is the same as "//type" but may be a little faster. "count(.|key('types', .))=1" is finding out if the current node is the first one with this name. It relies on the union operator on node-sets throwing away duplicates. Trevor Nash -- Traditional training & distance learning, Consultancy by email Melvaig Software Engineering Limited voice: +44 (0) 1445 771 271 email: tcn@xxxxxxxxxxxxx XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list