|
Subject: Re: [xsl] Noobie: normalize <b><a>...</a></b> to <a><b>...</b></a> From: Florent Georges <lists@xxxxxxxxxxxx> Date: Fri, 19 Feb 2010 16:57:16 +0000 (GMT) |
Hi,
> 1. <b> can contain mixed text, in which case nothing should be
>
changed.
> 2. <b><a>...</a></b> should be changed to <a><b>...</b></a>
>
only if the <a>...</a> element is the unique child node of
> <b>...</b>
The following transform, based on the Modified Identity
Transform pattern,
should do that (not tested though):
<xsl:template match="node()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates
select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template
match="b[count(a) eq 1][empty(node() except a)]">
<a>
<b>
<xsl:apply-templates select="a/node()"/>
</b>
</a>
</xsl:template>
This is simple: the first rule catches every node and
copies it,
then continues navigating through its descendents. But the second
rule applies when the transform go through a special node: a "b"
element with
exactly one child (an "a" element). In that specific
case it creates two
elements (a "b" within an "a") and continues
navigating through "a"'s
descendents.
Regards,
--
Florent Georges
http://www.fgeorges.org/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Noobie: normalize <b><a>., Syd Bauman | Thread | [xsl] recursive replacing strings w, James Cummings |
| Re: [xsl] recursive replacing strin, Martin Honnen | Date | [xsl] Required item type of first a, Spencer Tickner |
| Month |