XSL navigation in XML tree problem (final version)

Subject: XSL navigation in XML tree problem (final version)
From: Jean-Robert Wiame <Jean-Robert.Wiame@xxxxxxxxx>
Date: Thu, 28 Oct 1999 10:00:22 +0200
(Sorry, I have transfered a bad version, this is the final and good version,
thanks)

> Hello XSL gourous...
> 
> Hope you can help me with this one... I have a problem regarding some XSL
> features. I have xml documents in which there are java methods
> definitions. In those methods are descriptions typed by the user. Part of
> those descriptions are about the parameters of the methods. The user must
> define the number and the name of the parameter he wishes to document in
> an element using this format: <MPA number="..." name="...">Parameter
> description... blablabla... </MPA>. The name of the parameter is defined
> nowhere else... Of course, the user is not forced to define all parameters
> and there is no defined order for the user's descriptions. The XSL I am
> working on tries to create the signature of the method and needs the names
> of the parameters (if they are described...). These names are accessed in
> the processing of the parameters but are at a completely different level
> of the structure. The number of the parameter is not defined in the
> parameter but the parameters are in the right sequence (the first
> parameter is number 1, the second is number 2...). I am trying to find a
> way to have those available parameter names in the method signature. I
> provide here a sample of the XSL I am using and a sample of the XML I am
> using. In red, you will find the interesting parts... In the XSL, the part
> in red is where the parameter names should be discovered (that part
> doesn't work of course...). In the XML, the parts in red are the user's
> description of the parameters.
> 
> The solution must be found in XSL. A script may be useful but I would
> prefer not using one...
> 
> This is the XSL formatting procedure to get the method signature:
> 
>             <DIV class="SUB">
>               <xsl:for-each select="CAU/Modifier" order-by="Description">
>                 <xsl:value-of select="Name"/>
>               </xsl:for-each>
> 
>               <!-- Result -->
>               <xsl:if test="CAU/Result/Class">
> 
>                 <xsl:if test="CAU/Result/Class/Link">
>                   <xsl:element name="a"><xsl:attribute
> name="href"><xsl:value-of
> select="CAU/Result/Class/Link"/></xsl:attribute><xsl:value-of
> select="CAU/Result/Class/Name"/></xsl:element>
>                 </xsl:if>
> 
>                 <xsl:if test="CAU/Result/Class[not(Link)]">
>                   <SPAN class="RT">
>                     <xsl:value-of select="Result/CAU/Class/Name"/>
>                   </SPAN>
>                 </xsl:if>
> 
>                 <xsl:if
> test="CAU/Result/is_Method_of_Result_Class[Description]">
>                   <SPAN class="RT">
>                     <xsl:value-of
> select="CAU/Result/is_Method_of_Result_Class/Description"/>
>                   </SPAN>
>                 </xsl:if>
> 
>               </xsl:if>
> 
>               <xsl:if test="CAU/Result/Interface">
> 
>                 <xsl:if test="CAU/Result/Interface/Link">
>                   <xsl:element name="a"><xsl:attribute
> name="href"><xsl:value-of
> select="CAU/Result/Interface/Link"/></xsl:attribute><xsl:value-of
> select="CAU/Result/Interface/Name"/></xsl:element>
>                 </xsl:if>
> 
>                 <xsl:if test="CAU/Result/Interface[not(Link)]">
>                   <SPAN class="RT">
>                     <xsl:value-of select="CAU/Result/Interface/Name"/>
>                   </SPAN>
>                 </xsl:if>
> 
>               </xsl:if>
> 
>               <SPAN class="MET">
>                 <xsl:value-of select="Method/Name"/>
>               </SPAN>
> 
>               (
> 
>               <!-- Parameters -->
>               <xsl:for-each select="CAU/Parameter">
> 
>                 <xsl:if test="Class">
> 
>                   <xsl:if test="Class/Link">
>                     <xsl:element name="a"><xsl:attribute
> name="href"><xsl:value-of
> select="Class/Link"/></xsl:attribute><xsl:value-of
> select="Class/Name"/></xsl:element>
>                   </xsl:if>
> 
>                   <xsl:if test="Class[not(Link)]">
>                     <SPAN class="CLT">
>                       <xsl:value-of select="Class/Name"/>
>                     </SPAN>
>                   </xsl:if>
> 
>                   <xsl:if test="isMethodOfParameterClass[Description]">
> 
>                     <SPAN class="CLT">
>                       <xsl:value-of
> select="isMethodOfParameterClass/Description"/>
>                     </SPAN>
>                   </xsl:if>
> 
>                 </xsl:if>
>   
>                 <xsl:if test="Interface">
> 
>                   <xsl:if test="Interface/Link">
>                     <xsl:element name="a"><xsl:attribute
> name="href"><xsl:value-of
> select="Interface/Link"/></xsl:attribute><xsl:value-of
> select="Interface/Name"/></xsl:element>
>                   </xsl:if>
> 
>                   <xsl:if test="Interface[not(Link)]">
>                     <SPAN class="INT">
>                       <xsl:value-of select="Interface/Name"/>
>                     </SPAN>
>                   </xsl:if>
>   
>                   <xsl:if test="isMethodOfParameterClass[Description]">
> 
>                     <SPAN class="INT">
>                       <xsl:value-of
> select="isMethodOfParameterClass/Description"/>
>                     </SPAN>
>                   </xsl:if>
> 
>                 </xsl:if>
> 
	<!-- START HERE -->

>                 <xsl:for-each
> select="../../Method/Description/MPA[index()=@number]">
>                     <xsl:value-of select="@name" />
>                 </xsl:for-each>
> 
	<!-- END HERE -->

>                 <xsl:if test="context()[not(end())]">, </xsl:if>
>               </xsl:for-each>
>               )
> 
>               <!-- Exceptions -->
>               <xsl:if test="CAU/Exception">
> 
>                 throws 
> 
>                 <xsl:for-each select="CAU/Exception/Class[Link]"
> order-by="Name">
>                   <xsl:element name="a"><xsl:attribute
> name="href"><xsl:value-of select="Link"/></xsl:attribute><xsl:value-of
> select="Name"/></xsl:element>
>                   <xsl:if test="context()[not(end())]">, </xsl:if>
>                 </xsl:for-each>
> 
>                 <xsl:for-each select="CAU/Exception/Class[not(Link)]"
> order-by="Name">
>                   <SPAN class="CLT">
>                     <xsl:value-of select="Name"/>
>                   </SPAN>
>                   <xsl:if test="context()[not(end())]">, </xsl:if>
>                 </xsl:for-each>
>   
>               </xsl:if>
>             </DIV>
> 
> This is the XML document describing a method:
> 
> <Meth>
>   <Method>
>     <ID>38555</ID>
>     <Picture>
>       <URL>Method.jpg</URL>
>       <Width>152</Width>
>       <Height>247</Height>
>     </Picture>
>     <System>1</System>
>     <Name>getField0</Name>
>     <Description>
> 
	<!-- START HERE -->

>       <MPA number="1" name="blabla1">This is just a test of the method
> name...</MPA>
>       <MPA number="2" name="blabla2">This is just a test of the method
> name... ttt</MPA>
> 
	<!-- END HERE -->

>     </Description>
>   </Method>
>   <CAU>
>     <Result>
>       <Class>
>         <ID>38514</ID>
>  
> <Link>\\William\Users\cn\CodeAnalyzer\Documentation\Field_38514.xml</Link>
>         <Name>Field</Name>
>       </Class>
>       <isMethodOfResultClass>
>         <ID>149852</ID>
>         <Picture>
>           <URL>Class.jpg</URL>
>           <Width>157</Width>
>           <Height>242</Height>
>         </Picture>
>         <Source>getField0</Source>
>         <Target>Field</Target>
>       </isMethodOfResultClass>
>     </Result>
>   </CAU>
>   <CAU>
>     <Parameter>
>       <Class>
>         <ID>38253</ID>
>  
> <Link>\\William\Users\cn\CodeAnalyzer\Documentation\String_38253.xml</Link
> >
>         <Name>String</Name>
>       </Class>
>       <isMethodOfParameterClass>
>         <ID>149853</ID>
>         <Picture>
>           <URL>isParameterOf.jpg</URL>
>           <Width>153</Width>
>           <Height>245</Height>
>         </Picture>
>         <Source>getField0</Source>
>         <Target>String</Target>
>       </isMethodOfParameterClass>
>     </Parameter>
>     <Parameter>
>       <Class>
>         <ID>38245</ID>
>  
> <Link>\\William\Users\cn\CodeAnalyzer\Documentation\int_38245.xml</Link>
>         <Name>int</Name>
>       </Class>
>       <isMethodOfParameterClass>
>         <ID>149854</ID>
>         <Picture>
>           <URL>isParameterOf.jpg</URL>
>           <Width>-1</Width>
>           <Height>-1</Height>
>         </Picture>
>         <Source>getField0</Source>
>         <Target>int</Target>
>       </isMethodOfParameterClass>
>     </Parameter>
>   </CAU>
>   <CAU>
>     <Modifier>
>       <ID>38247</ID>
>       <System>0</System>
>       <Name>private</Name>
>     </Modifier>
>     <Modifier>
>       <ID>38278</ID>
>       <System>1</System>
>       <Name>native</Name>
>     </Modifier>
>   </CAU>
> </Meth>
> 
> I didn't find a solution... Maybe you can...
> 
PS : the <!--START HERE--> and <!--END HERE--> comment must be removed. They
are here only to show the important part of the XML and XSL code, thanks

> NEVE Cédric - CEDITI
> 


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


Current Thread