|
Subject: Re: [xsl] Joining sibling elements From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx> Date: Thu, 11 Aug 2005 15:52:19 +0530 |
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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Joining sibling elements, Marcin Miłkowski | Thread | Re: [xsl] Joining sibling elements, Marcin Miłkowski |
| Re: [xsl] User defined SAX ContentH, Alan | Date | Re: [xsl] Joining sibling elements, Marcin Miłkowski |
| Month |