And to restrict to <p> that contains *only* <p>:
<xsl:template match="p[p and not(* except p) and count(../*) = 1]">
<xsl:apply-templates/>
</xsl:template>
Using "* except" is my favorite way of limiting to certain elements only.
To limit to elements containing A and/or B but nothing else:
*[A|B][not(* except A|B)]
To limit to elements containing A and B but nothing else:
*[A][B][not(* except A|B)]
- Chris
-----Original Message-----
From: Liam R. E. Quin liam@xxxxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Friday, March 17, 2023 6:30 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: How to remove outer tag if present in XSLT
On Fri, 2023-03-17 at 19:44 +0000, Matt Van Voorhies mvanvoorhies@xxxxxxxxxxx
wrote:
>
> B B B B B Ungroup (remove) the outer <p> if it is the only element that is
> a child of the arbitrary outer node (and is a <p> node)..
>
> B B B B B So a <div>
> B B B B B B B B B B B ...
> B B B B B B B B B B B ...
> B B B B B B B B B </div>
> B B B B
> B B B B B Would not unwrap, since it's a "<div>" and not a "<p>"
<xsl:template match="p[p and count(../*) = 1]">
<xsl:apply-templates/>
</xsl:template>
will unwrap every p element that contains p element and has no siblings.
liam
--
Liam Quin,B https://www.delightfulcomputing.com/
Available for XML/Document/Information Architecture/XSLT/ XSL/XQuery/Web/Text
Processing/A11Y training, work & consulting.
Barefoot Web-slave, antique illustrations: B http://www.fromoldbooks.org
|