Subject: [xsl] Problem setting ENDTAG in new XML Document From: nikken@xxxxxxxxxx Date: Fri, 28 Nov 2003 10:19:01 +0100 |
I want to convert an existing XML Document to an other XML Document using XSLT. The new Document sould include new Group-Main-Tags with the following rule: AAA -> Group1 (AAB and AAC) repeat:0..n BBB -> Group2 (subtag of Group1, with BBA,BBC) repeat:0..n The Source-Document looks like this: ==================================== <MAIN> <MSG>1.0</MSG> <ORG>2.0</ORG> <AAA>3.0.0</AAA> <AAB>3.0.1</AAB> <AAC>3.0.2</AAC> <BBB>4.0.0</BBB> <BBA>4.0.1</BBA> <BBB>4.1.0</BBB> <BBA>4.1.1</BBA> <AAA>3.1.0</AAA> <AAB>3.1.1</AAB> <AAA>3.2.0</AAA> <BBB>4.1.0</BBB> <BBA>4.1.1</BBA> <BBC>4.1.2</BBC> </MAIN> The new Document sould look like this: ====================================== <?xml version="1.0" encoding="UTF-8"?> <MAIN> <MSG>1.0</MSG> <ORG>2.0</ORG> <Group1> <AAA>3.0.0</AAA> <AAB>3.0.1</AAB> <AAC>3.0.2</AAC> <Group2> <BBB>4.0.0</BBB> <BBA>4.0.1</BBA> </Group2> <Group2> <BBB>4.1.0</BBB> <BBA>4.1.1</BBA> </Group2> </Group1> <Group1> <AAA>3.1.0</AAA> <AAB>3.1.1</AAB> </Group1> <Group1> <AAA>3.2.0</AAA> <Group2> <BBB>4.1.0</BBB> <BBA>4.1.1</BBA> <BBC>4.1.2</BBC> </Group2> </Group1> </MAIN> My problem was to set the ENDTAGS. I tried to do it using XPath .... Here the not working Stylesheet witch generate a non well formed XML Dokument. <!--*************************** THIS STYLESEET IS NOT WORKING CORRECT ****************** --> <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <MAIN> <xsl:for-each select="MAIN/*"> <xsl:if test="name() = 'AAA'"> <xsl:call-template name="setEndTagBBBGroup2"/> <xsl:call-template name="setEndTagAAAGroup1"/> <xsl:call-template name="setBeginTagAAAGroup1"/> </xsl:if> <xsl:if test="name() = 'BBB'"> <xsl:call-template name="setEndTagBBBGroup2"/> <xsl:call-template name="setBeginTagBBBGroup2"/> </xsl:if> <xsl:variable name="tag"> <xsl:value-of select="name()"/> </xsl:variable> <xsl:element name="{$tag}"> <xsl:value-of select="."/> </xsl:element> </xsl:for-each> <xsl:call-template name="setEndTagBBBGroup2"/> <xsl:call-template name="setEndTagAAAGroup1"/> </MAIN> </xsl:template> <xsl:template name="setEndTagAAAGroup1"> <!-- get prev node in node-set --> <xsl:if test="preceding::AAA[1]"> <xsl:text disable-output-escaping="yes"></Group1></xsl:text> </xsl:if> </xsl:template> <xsl:template name="setBeginTagAAAGroup1"> <xsl:text disable-output-escaping="yes"><Group1></xsl:text> </xsl:template> <xsl:template name="setEndTagBBBGroup2"> <!-- get prev node in node-set --> <xsl:if test="preceding::BBB[1]"> <xsl:text disable-output-escaping="yes"></Group2></xsl:text> </xsl:if> </xsl:template> <xsl:template name="setBeginTagBBBGroup2"> <xsl:text disable-output-escaping="yes"><Group2></xsl:text> </xsl:template> </xsl:stylesheet> Has anybody a idea how to do that? Thanks XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Nested elements problem, Jarno . Elovirta | Thread | RE: [xsl] Global variable in xsl, Jarno . Elovirta |
Re: [xsl] I haven't got xslt.dtd..., Sean Wheller | Date | RE: [xsl] Search a string, Ram |
Month |