RE: [xsl] Processing Nested Lists

Subject: RE: [xsl] Processing Nested Lists
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 26 Feb 2007 16:24:09 -0000
The structure of your input and output seems to be essentially the same, so
an ordinary recursive tree-walk using apply-templates should do the job:

<xsl:template match="TaxonomyNode">
  <xsl:copy>
  <xsl:copy-of select="@*">
  <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

<xsl:template match="Description">
  <Description>
     <w:r>
       <w:t><xsl:value-of select="."/></w:t>
     </w:r>
  </Description>
</xsl:template>

Or have I missed something?

Michael Kay
http://www.saxonica.com/
   

> -----Original Message-----
> From: Andy Carr1 [mailto:CARRA@xxxxxxxxxx] 
> Sent: 26 February 2007 16:13
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Processing Nested Lists
> 
> Hi
> 
> Does anybody know how do you process nodes within a tag that 
> are nested to an undefined depth.
> 
> I have a tag structure that looks like this:
> 
> <TaxonomyEntries>
> - - -<TaxonomyNode> (1 to infinity)
> - - - - - -<Description />
> - - - - - -<TaxonomyNode /> (0 to infinity)
> - - -<TaxonomyNode>
> <TaxonomyEntries>
> 
> And I have some XML that looks like this:
> 
> <TopTag>
>    <TaxonomyEntries>
>       <TaxonomyNode name="Arbitrary Name">          -----Top 
> Level Node
>          <Description>any description</Description>
>          <TaxonomyNode name="another name">
>             <TaxonomyNode name="yet another name">
>                <Description>any description</Description>
>                <TaxonomyNode name="and yet another name">
>                   <Description>any description</Description>
>                </TaxonomyNode>
>             </TaxonomyNode>
>          </TaxonomyNode>
>       </TaxonomyNode>
>       <TaxonomyNode name="Arbitrary Name">          -----Top 
> Level Node
>          <Description>any description</Description>
>          <TaxonomyNode name="another name">
>             <Description>any description</Description>
>          </TaxonomyNode>
>       </TaxonomyNode>
>    </TaxonomyEntries>
> </TopTag>
> 
> I need to apply a stylesheet (XSL v2.0) to this XML to create 
> a Table in Word so that each Top Level TaxonomyNode is in a 
> separate Table Row and the children and childrens-children 
> are all nested accordingly with their descriptions displayed.
> 
> <w:tbl>
>    <w:tblPr>
>    <w:tblGrid>
>    <w:tr>
>    <TaxonomyEntries>
>       <w:tr>
>          <w:tc>
>             <w:p>
>                <TaxonomyNode name="Arbitrary Name">
>                   <Description>
>                      <w:r>
>                         <w:t>any description</w:t>
>                      </w:r>
>                   </Description>
>                   <TaxonomyNode name="another name">
>                      <Description>
>                         <w:r>
>                            <w:t>any description</w:t>
>                         </w:r>
>                      </Description>
>                      <TaxonomyNode name="yet another name">
>                         <Description>
>                            <w:r>
>                               <w:t>any description</w:t>
>                            </w:r>
>                         </Description>
>                         <TaxonomyNode name="and yet another name">
>                            <Description>
>                               <w:r>
>                                  <w:t>any description</w:t>
>                               </w:r>
>                            </Description>
>                         </TaxonomyNode>
>                      </TaxonomyNode>
>                   </TaxonomyNode>
>                </TaxonomyNode>
>             </w:p>
>          </w:tc>
>       </w:tr>
>       <w:tr>
>          <w:tc>
>             <w:p>
>                <TaxonomyNode name="Arbitrary Name">
>                   <Description>
>                      <w:r>
>                         <w:t>any description</w:t>
>                      </w:r>
>                   </Description>
>                   <TaxonomyNode name="another name">
>                      <Description>
>                         <w:r>
>                            <w:t>any description</w:t>
>                         </w:r>
>                      </Description>
>                   </TaxonomyNode>
>                </TaxonomyNode>
>             </w:p>
>          </w:tc>
>       </w:tr>
>    </TaxonomyEntries>
> <w:tbl>
> 
> Could any one give me some pointers on how to achieve this 
> nesting. It seems to me that some sort of recursion is in 
> order but I'm not sure how to implement it when there is no 
> fixed depth to the nesting i.e there is no break-out parameter.
> 
> Hopefully
> Andy
> 
> 
> 
> 
> 
> 
> 
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales 
> with number 741598. 
> Registered office: PO Box 41, North Harbour, Portsmouth, 
> Hampshire PO6 3AU

Current Thread