[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Recursively removing empty tags from deepest child
It seems that by "empty" you mean an element, which does not have any text-node children. If this is the case, then the following simple override of the identity transformation solves the problem: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*" /> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="section[not(.//text())]"/> <xsl:template match="*[ancestor::section and not(text())]"/> </xsl:stylesheet> When applied on your original source.xml: <bdy> <section><p>not empty</p><p></p></section> <section><section><p></p></section></section> </bdy> the above transformation produces the wanted result: <bdy><section><p>not empty</p></section></bdy> Hope this helped. Cheers, Dimitre Novatchev, FXSL developer, http://fxsl.sourceforge.net/ -- the home of FXSL Resume: http://fxsl.sf.net/DNovatchev/Resume/Res.html "David Holden" <dh@xxxxxxxx> wrote in message news:200403221336.48500.dh@xxxxxxxxxxx > Hello, > > I'm trying to remove certain empty tags from a set a files > > e.g., simplified example > > <?xml version="1.0" encoding="US-ASCII"?> > <bdy> > <section><p>not empty</p><p></p></section> > <section><section><p></p></section></section> > </bdy> > > > I want > > <?xml version="1.0" encoding="US-ASCII"?> > <bdy> > <section><p>not empty</p></section> > </bdy> > > > i.e. in this example in the first section the empty <p></p> is removed and the > whole of the second section removed since it contains just an empty p and > empty section elements. > > > So far I have > > > > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xalan="http://xml.apache.org/xslt" > exclude-result-prefixes="xalan" > version="1.0" > > > <!-- output format xml --> > <xsl:output > method="xml" > encoding="US-ASCII"> > > <xsl:strip-space elements="*"/> > > <xsl:template match="/"> > <xsl:apply-templates mode="copy"/> > </xsl:template> > > <xsl:template match="@*|node()" mode="copy"> > <xsl:copy> > <xsl:apply-templates select="@*|node()" mode="copy"/> > </xsl:copy> > </xsl:template> > > <xsl:template match="//section|//p" mode="copy"> > <xsl:choose> > <xsl:when test="normalize-space(.)"> > <xsl:copy> > <xsl:apply-templates select="@*|node()" mode="copy"/> > </xsl:copy> > </xsl:when> > <xsl:when test="count(./*)"> > <xsl:copy> > <xsl:apply-templates select="@*|node()" mode="copy"/> > </xsl:copy> > </xsl:when> > <xsl:otherwise> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > </xsl:stylesheet> > > > But this only removes the deepest empty child element. > > > giving > > <?xml version="1.0" encoding="US-ASCII"?> > <bdy><section><p>not empty</p></section><section><section/></section></bdy> > > > > I need to be able to recurse so that after removing the deepest child if then > checks to seem if its parent is empty etc... > > > > anyone help, > > thanks. > > Dave. > > > > > -- > Dr. David Holden. (Systems Developer) > Crystallography Journals Online: <http://journals.iucr.org> > > Thanks in advance:- > Please avoid sending me Word or PowerPoint attachments. > See: <http://www.fsf.org/philosophy/no-word-attachments.html> > > UK Privacy (R.I.P) : http://www.stand.org.uk/commentary.php3 > Public GPG key available on request. > ------------------------------------------------------------- > __________________________________ Do you Yahoo!? Yahoo! Finance Tax Center - File online. File on time. http://taxes.yahoo.com/filing.html
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|