xsl-list
[Top] [All Lists]

Re: data structure in xslt?

2002-10-09 03:46:23
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])=1">
         <xsl:text>include "</xsl:text>
         <xsl:value-of select="." />
         <xsl:text>.h"&#xA;</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])=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(_at_)melvaig(_dot_)co(_dot_)uk

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>