Re: [xsl] How to remove outer tag if present in XSLT

Subject: Re: [xsl] How to remove outer tag if present in XSLT
From: "Chris Papademetrious christopher.papademetrious@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 17 Mar 2023 22:36:00 -0000
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: [xsl] 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

Current Thread