Subject: Re: [xsl] How to remove (in addition) empty attributes? From: Syd Bauman <Syd_Bauman@xxxxxxxxx> Date: Thu, 3 Dec 2009 08:50:06 -0500 |
Ah, guess I was answering a slightly different question. If you are trying to kill any element that has either no child nodes at all, or has only child attribute nodes that are empty, perhaps <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="*[normalize-space( concat(.,@*) )='']"/> </xsl:stylesheet> will do the trick. The first part is a typical identity transform. The last template there matches any element whose content & attribute values combined consist of nothing other than whitespace. There may be better ways to do this, but I think it does what you want. > The problem with this is that only elements OR attributes are > stripped but not both at the same time. > Assume the following XML source: > <ns11:elem1 myattr=""> > <ns22:subelem2 /> > <ns22:subelem3></ns22:subelem3> > </ns11:elem1> > Then applying the XSLT script below will result in > <ns11:elem1> > </ns11:elem1> > As you can see the ns11:elem1 persists. > It is handled only in the remove attribute template and does not > match the other remove-empty-element template. > So how can I iteratively/recursively re-apply the script/templates > on the result again? > XSLT script: > <?xml version="1.0"?> > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> > <xsl:output indent="yes"/> > <xsl:template match="@*[normalize-space(.)='']"/> > <xsl:template match="*[not(node())]"/> > <xsl:template match="@* | node()"> > <xsl:copy> > <xsl:apply-templates select="@* | node()"/> > </xsl:copy> > </xsl:template> > </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to remove (in additio, Ben Stover | Thread | Re: [xsl] How to remove (in additio, Ben Stover |
Re: [xsl] How to remove (in additio, Ben Stover | Date | RE: [xsl] Dynamic Input file path o, Hermann Stamm-Wilbra |
Month |