Hello, I am trying to convert a XML scheme A to a XML scheme B, using XSL 1.0. Can someone help me ? Many thanks. ------------------------------------------------------------------------------------------------------- Here is the schemes : Scheme A : <node TEXT="ROOT"> <node TEXT="N1"> <node TEXT="N11"/> <node TEXT="N12"/> <node TEXT="N13"/> <node/> <node TEXT="N2"> <node TEXT="N21"/> <node TEXT="N22"/> <node TEXT="N23"/> <node/> <node/> Scheme B : <TEST_PLAN> <PLAN ID="0"> <GROUP ID="1"> <FEATURE ID="3"> <FEATURE/> <FEATURE ID="4"> <FEATURE/> <FEATURE ID="5"> <FEATURE/> <GROUP/> <GROUP ID="2"> <FEATURE ID="6"> <FEATURE/> <FEATURE ID="7"> <FEATURE/> <FEATURE ID="8"> <FEATURE/> <GROUP/> <PLAN/> <TEST_PLAN/>
Jean-sébastien LEROY wrote: > I am trying to convert a XML scheme A to a XML scheme B, using XSL 1.0. Can > someone help me ? > Here is the schemes : > > Scheme A : > > <node TEXT="ROOT"> > <node TEXT="N1"> > <node TEXT="N11"/> > <node TEXT="N12"/> > <node TEXT="N13"/> > <node/> > <node TEXT="N2"> > <node TEXT="N21"/> > <node TEXT="N22"/> > <node TEXT="N23"/> > <node/> > <node/> That is not even well-formed XML, assuming you want <node TEXT="ROOT"> <node TEXT="N1"> <node TEXT="N11"/> <node TEXT="N12"/> <node TEXT="N13"/> </node> <node TEXT="N2"> <node TEXT="N21"/> <node TEXT="N22"/> <node TEXT="N23"/> </node> </node> > Scheme B : > > <TEST_PLAN> > <PLAN ID="0"> > <GROUP ID="1"> > <FEATURE ID="3"> <FEATURE/> > <FEATURE ID="4"> <FEATURE/> > <FEATURE ID="5"> <FEATURE/> > <GROUP/> > <GROUP ID="2"> > <FEATURE ID="6"> <FEATURE/> > <FEATURE ID="7"> <FEATURE/> > <FEATURE ID="8"> <FEATURE/> > <GROUP/> > <PLAN/> > <TEST_PLAN/> That is not well-formed either, assuming you want <TEST_PLAN> <PLAN ID="0"> <GROUP ID="1"> <FEATURE ID="3"> </FEATURE> <FEATURE ID="4"> </FEATURE> <FEATURE ID="5"> </FEATURE> </GROUP> <GROUP ID="2"> <FEATURE ID="6"> </FEATURE> <FEATURE ID="7"> </FEATURE> <FEATURE ID="8"> </FEATURE> </GROUP> </PLAN> </TEST_PLAN> then the following stylesheet <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <TEST_PLAN> <xsl:apply-templates select="*"/> </TEST_PLAN> </xsl:template> <xsl:template match="node[@TEXT = 'ROOT']"> <PLAN ID="0"> <xsl:apply-templates select="*"/> </PLAN> </xsl:template> <xsl:template match="/node/node"> <GROUP ID="{position()}"> <xsl:apply-templates select="*"/> </GROUP> </xsl:template> <xsl:template match="/node/node/node"> <FEATURE ID="{position() + count(../../node | ../preceding-sibling::node/node)}"></FEATURE> </xsl:template> </xsl:stylesheet> produces the wanted output. -- Martin Honnen --- MVP XML http://JavaScript.FAQTs.com/