Subject: RE: [xsl] Closing and opeing tag in that order From: Mike Ferrando <mikeferrando@xxxxxxxxx> Date: Fri, 27 Dec 2002 05:00:12 -0800 (PST) |
Chandra, Here is how I did it. I think that you could save yourself alot of trouble by making the loose text attributes of tag1. (below) I didn't put data3 loose in tag1, I thought this inconsistency must be an oversight of somekind. Sincerely, Mike Ferrando Washington, DC ===output:=== <?xml version="1.0" encoding="utf-8" standalone="no"?> <tag1>data1</tag1> <tag1> <tag2>data2</tag2> </tag1> <tag1>data3</tag1> <tag1> <tag2>data4</tag2> </tag1> <tag1> <tag2>data5</tag2> </tag1> ===XML:=== <?xml version="1.0" encoding="utf-8" standalone="no"?> <tag1> data1 <tag2>data2</tag2> data3 <tag2>data4</tag2> <tag2>data5</tag2> </tag1> ===XSL:=== <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output version="1.0" method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="no" standalone="no" media-type="text/xml"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="tag1"> <xsl:apply-templates mode="xxx"/> </xsl:template> <xsl:template match="tag2" mode="xxx"> <tag1> <tag2> <xsl:apply-templates/> </tag2> </tag1> </xsl:template> <xsl:template match="text()" mode="xxx"> <xsl:variable name="test" select="normalize-space(.)"/> <xsl:choose> <xsl:when test="string-length($test)>1"> <tag1> <xsl:value-of select="normalize-space(translate(., '
', ''))"/> </tag1> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="text()"> <xsl:value-of select="normalize-space(translate(., '
', ''))"/> </xsl:template> </xsl:stylesheet> --- Chandra - <pchandramohan@xxxxxxxxxxx> wrote: > Hi Tom, > Thanks for the quick reply. Well for the tag structure you > mentioned > ------ > >>If you had a document like this, what should > the output look like? > > <tag1> > data1 > <tag2>data2</tag2> > data3 > <tag2>data4</tag2> > <tag2>data5</tag2> > </tag1> > ----- > the output should be > > > <tag1> > data1 > </tag1><tag1> > <tag2>data2</tag2> > data3 > </tag1><tag1> > <tag2>data4</tag2> > </tag1><tag1> > <tag2>data5</tag2> > </tag1> > > You see the dtd states that "a <tag1> element can have a SINGLE > <tag2> > element as child provided <tag1> is IMMEDIATELY followed by <tag2>. > > The document is a valid and well formed finally even though i > add the > tags in this manner </tag1><tag1>. > Regrouping the elements is not feasible in my situation as > several other > things would be affected. I was hence wondering whether there was > any > solution. If I use <xml:output> tag to show as "text". would that > work?? > Thanks in advance > Regards, > Chandra > > > > > > > > > ----Original Message Follows---- > From: "Passin, Tom" <tpassin@xxxxxxxxxxxx> > Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> > Subject: RE: [xsl] Closing and opeing tag in that order > > [ Chandra] > > I need to tansform an xml document into another xml > > document so that the > > transformed xml document conforms to a certain dtd. > > In order to do that, I need to add a closing tag followed > > by an opening > > tag. For eg: > > > > The initial document: > > <tag1> > > data1 > > <tag2>data2</tag2> > > </tag1> > > > > > > The transformed document must be > > <tag1> > > data1 > > </tag1><tag1> <!--LINE 3--> > > <tag2>data2</tag2> > > </tag1> > > > > So u see, I need the LINE3 to be added. The XSLT processor > > gives me an error > > when I try to do that. > > Of course it gives you an error - you are trying to use > non-well-formed > xml in the stylesheet. You do NOT need to add your LINE3. > Instead, you > need to regroup your elements. To do that, you need to understand > what > the rules for regrouping are. You have not conveyed them clearly > yet, > but once you do, either you will see what to do or the we can help > you. > > For example, is each instance of a tag2 element supposed to be the > only > child of a tag1 element? If you had a document like this, what > should > the output look like? > > <tag1> > data1 > <tag2>data2</tag2> > data3 > <tag2>data4</tag2> > <tag2>data5</tag2> > </tag1> > > Or, if you cannot have a document like this, what combinations are > allowed in the source document? Just get clear on what your > transformation really has to be, and until you do that stop > thinking > like "adding a line". XSLT is about changing one tree to another - > not > about adding lines of text or markup - and that is how you need to > think > about your problem. > > Cheers, > > Tom P > > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > > > _________________________________________________________________ > The new MSN 8: smart spam protection and 3 months FREE*. > http://join.msn.com/?page=features/junkmail&xAPID=42&PS=47575&PI=7324&DI=7474&SU= > > http://www.hotmail.msn.com/cgi-bin/getmsg&HL=1216hotmailtaglines_smartspamprotection_3mf > > > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > __________________________________________________ Do you Yahoo!? Yahoo! Mail Plus - Powerful. Affordable. Sign up now. http://mailplus.yahoo.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Closing and opeing tag in, Chandra - | Thread | RE: [xsl] Closing and opeing tag in, Mike Ferrando |
Re: [xsl] How to output open/close , Dimitre Novatchev | Date | RE: [xsl] Closing and opeing tag in, Mike Ferrando |
Month |