Subject: Re: [xsl] How to remove (in addition) empty attributes? From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> Date: Thu, 03 Dec 2009 14:33:36 -0500 |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:template match="/|*|@*|text()" mode="copy scrub"> <xsl:copy> <xsl:apply-templates select="*|@*|text()" mode="#current"/> </xsl:copy> </xsl:template>
<xsl:template match="/"> <xsl:variable name="scrubbed"> <xsl:apply-templates select="." mode="scrub"/> </xsl:variable> <xsl:variable name="copied"> <xsl:apply-templates select="." mode="copy"/> </xsl:variable> <xsl:choose> <xsl:when test="deep-equal($scrubbed, $copied)"> <xsl:sequence select="$scrubbed"/> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="$scrubbed"/> </xsl:otherwise> </xsl:choose> </xsl:template>
Cheers, Wendell
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>
On Wed, 2 Dec 2009 20:58:11 -0500, Syd Bauman wrote:
>How about matching the empty attributes and not generating any >output?
> <xsl:template match="@*[normalize-space(.)='']"/>
>> How can I delete empty attributes as well?
====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to remove (in additio, Wendell Piez | Thread | [xsl] both sorting and grouping set, Syd Bauman |
Re: [xsl] How to remove (in additio, Wendell Piez | Date | RE: [xsl] trouble looping using xsl, Miller, Mark |
Month |