xsl-list
[Top] [All Lists]

Re: xsl transform flatfile to xml

2005-02-17 09:12:27
Hi,

because the 'preceding::' axis contains nodes as they reside in the document (not as they occur in a node-set), you cannot use that axis to determine uniqueness of the 2nd degree.


Tempore 07:58:45, die 02/16/2005 AD, hinc in xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com scripsit viswanath <murugappan(_dot_)viswanath(_at_)megasoft(_dot_)com>:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
    <xsl:key name="records" match="line" use="c"/>
add:
        <xsl:key name="o" match="o" use="concat(../c,.)"/>
   <xsl:template match="/">
        <results>
            <xsl:apply-templates select="output"/>
        </results>
    </xsl:template>
   <xsl:template match="output">
        <xsl:for-each
            select="line[generate-id() =
generate-id(key('records',c)[1])]">
            <xsl:variable name="pos" select="position()"/>
            <comp id="{$pos}">
                <c>
                    <xsl:value-of select="c"/>
                </c>
               <xsl:call-template name="L2Interface">
                    <xsl:with-param name="parentid" select="$pos"/>
                </xsl:call-template>
               <xsl:call-template name="OSInterface">
                    <xsl:with-param name="parentid" select="$pos"/>
                </xsl:call-template>
           </comp>
        </xsl:for-each>
    </xsl:template>
   <xsl:template name="OSInterface">
        <xsl:param name="parentid"/>
        <xsl:for-each select="key('records',c)[not(o = preceding::o)]">
replace with:
<xsl:for-each select="key('records',c)[generate-id(o) =generate-id(key('o',concat(c,o)))]">
            <xsl:variable name="index" select="position()"/>
           <o array="{$index}" parent="{$parentid}">
                <name>
                    <xsl:value-of select="o"/>
                </name>
           </o>
        </xsl:for-each>
    </xsl:template>
   <xsl:template name="L2Interface">
        <xsl:param name="parentid"/>
       <xsl:for-each select="key('records',c)[not(l = preceding::l)]">
           <xsl:variable name="index" select="position()"/>
               <l array="{$index}" parent="{$parentid}">
                    <name>
                        <xsl:value-of select="l"/>
                    </name>
               </l>
       </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>


regards,
--
Joris Gillis (http://www.ticalc.org/cgi-bin/acct-view.cgi?userid=38041)
"Φιλήκοον ειναι μαλλον η φιλόλαλον" - Κλεόβουλος

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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