Re: [xsl] splitting multiple occurrences of an element within another element

Subject: Re: [xsl] splitting multiple occurrences of an element within another element
From: "Brian Benson" <bbenson@xxxxxxxxxxxx>
Date: Wed, 24 Sep 2003 13:56:30 -0500
Mukul

Thanks for the help.  I forgot to mention in my previous post that doclinks
are not always directly under a document.  In fact they can be any number
of nested levels deep.  The code that you sent gets the doclink info fine,
but does not return @form or @unid.  Any other ideas.





                                                                                                                                                
                      Mukul Gandhi                                                                                                              
                      <mukulgw3@xxxxxxxxx>              To:       xsl-list@xxxxxxxxxxxxxxxxxxxxxx                                               
                      Sent by:                          cc:                                                                                     
                      owner-xsl-list@xxxxxxxxxxx        Subject:  Re: [xsl] splitting multiple occurrences of an element within another element 
                      rrytech.com                                                                                                               
                                                                                                                                                
                                                                                                                                                
                      09/24/2003 01:12 PM                                                                                                       
                      Please respond to xsl-list                                                                                                
                                                                                                                                                




Hi Brian,
 Please try the XSL --

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>

<xsl:template match="/database">
   <database>
    <xsl:for-each select="document/doclink">
    <document>
    <form>
     <xsl:value-of select="parent::document/@form" />
    </form>
    <unid>
      <xsl:value-of
select="preceding-sibling::noteinfo[1]/@unid" />
    </unid>
    <doclink>
       <xsl:value-of select="@document" />
    </doclink>
  </document>
 </xsl:for-each>
</database>
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul


--- Brian Benson <bbenson@xxxxxxxxxxxx> wrote:
> I am very new to xsl and really struggling to get
> the results that I want.
>
> I am trying to convert an xml file that looks like
> this
> ====================
> <database>
>      <document form='formname'>
>           <noteinfo unid='abc'/>
>           <doclink document='1'/>
>           <doclink document='2'/>
>      </document>
> </database>
>
> Into an xml file that looks like this
> =====================
> </database>
>      <document>
>           <form>formname</form>
>           <unid>abc</unid>
>           <doclink>1</doclink>
>      </document>
>
>      <document>
>           <form>formname</form>
>           <unid>abc</unid>
>           <doclink>2</doclink>
>      </document>
> </database>
>
>
> The xslt that I have so far works well, except for
> the following:
> 1) If there is more than one doclink in one
> document, they need to be split
> into multiple documents so that there is one doclink
> per document.  The xsl
> below puts all doclinks in one document.
> 2) The form and unid attributes are output as
> attributes and they need to
> be converted to elements.
>
> I have been able to get both of the above to work,
> but not at the same
> time.  Any help is appreciated.
>
> The xslt that I have so far looks like this:
> =====================
> <xsl:template match="/">
>      <database>
>           <xsl:apply-templates/>
>      </database>
> </xsl:template>
>
> <xsl:template match="dxl:document">
>      <document>
>           <xsl:copy-of select="@form |
> dxl:noteinfo/@unid
> |.//dxl:doclink"/>
>      </document>
>
>      <xsl:apply-templates/>
> </xsl:template>
>
>
> <!-- remove all other text and attributes -->
> <xsl:template match ="text()|@*"></xsl:template>
>
> <!-- remove all documents with no doc links -->
> <xsl:template match
> ="dxl:document[not(.//dxl:doclink)]"></xsl:template>
>
>
>
>
>
>  XSL-List info and archive:
> http://www.mulberrytech.com/xsl/xsl-list
>


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

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






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


Current Thread