[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Joining sibling elements
Hi Marcin, I think, in this case we have to follow some hard coding approach. IMHO, I think there is a point when automation of XSLT Stylesheet writing is not feasible. I tried to rework the example you gave. Given this XML - (now b elements exist even deeper) <?xml version="1.0" encoding="UTF-8"?> <root> <c> <a> <b>this</b> <b>this 1</b> <b>this 2</b> </a> </c> <c> <a> <b>this 3</b> </a> </c> <c> <a> <b>this 4</b> <b>this 5</b> </a> </c> <c> <a> <b>this 6</b> <b>this 7</b> <b>this 8</b> <b>this 9</b> </a> </c> <c> <a> <b>this 10</b> <b>this 11</b> <b>this 12</b> <b>this 13</b> </a> </c> </root> This stylesheet produces the same output - <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:common="http://exslt.org/common" exclude-result-prefixes="common"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/root"> <root> <xsl:apply-templates select="c"/> </root> </xsl:template> <xsl:template match="c"> <xsl:apply-templates select="a"/> </xsl:template> <xsl:template match="a"> <b> <xsl:variable name="rtf"><xsl:for-each select="b"><xsl:value-of select="."/><xsl:text> </xsl:text></xsl:for-each></xsl:variable> <xsl:value-of select="common:node-set($rtf)/text()"/> </b> </xsl:template> </xsl:stylesheet> Regards, Mukul On 8/11/05, Marcin Mi3kowski <milek_pl@xxxxx> wrote: > Hi Mukul, > > this is a good idea and I'll try to use variables for comparing. Note > that I have to retain all attributes and elements which is quite tricky > in scenarios like: > > <a><b atr1="12"><c><d>text</d></c></b><b atr1="12><c><d> </d></c><b><b > atr1="13"><c><d>etc.</d></c><b> > > especially when I cannot predict which and how many elements would > appear under <b> but I know that <d> contains only text value. > > Seems to me I have to compare rtfs containing all elements except for > <d>. So I would try to create two variables: first one containing such > rtf of the current <b>, and a second one containing following-sibling of > this current <b>. If they are the same, copy text() from <d> to the rtf > of current <b>, and write this rtf to the output. If not, write both > rtfs to the output. > > The problem is that I don't know how to construct the for-each statement > to process exactly the current <b> and its following sibling, and to > skip the following sibling from processing... > > Best regards, > Marcin
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|