Subject: Re: [xsl] Rebuild an element without copying defaulted attributes? From: "Abel Braaksma (Exselt) abel@xxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 12 Aug 2014 17:04:03 -0000 |
> My problem is the unchanged. > > > <xsl:template match="*"> > <xsl:element name="{name(.)}"> > <xsl:for-each select="@*"> > <xsl:attribute name="{name(current())}" ><xsl:value-of > select="."/></xsl:attribute> </xsl:for-each> <xsl:apply-templates/> > </xsl:element> </xsl:template> If you want to differentiate between an explicitly defaulted attribute in your input (<pre xml:space="preserve" />) and an implicitly defaulted attribute (<pre />) you are out of luck with standard XSLT. But if it works for you if you just make all attributes of xml:space implicitly defaulted, you can do the following: <xsl:template match="node() |@*"> <xsl:copy> <xsl:apply-templates select="node() | @*" /> </xsl:copy> </xsl:template> <xsl:template match="@xml:space[. = 'preserve']" /> Now the output will not contain any xml:space="preserve", which, if it is part of your DTD, has the same semantic meaning as copying the implicit default attributes which you did in your example code. This is also a bit of a more convenient way to write the matching template you wrote, as the xsl:copy will automatically copy the context node, which you were doing manually (but: you were not processing the children, so my code and your code is not exactly the same). Cheers, Abel Braaksma Exselt streaming XSLT 3.0 processor http://exselt.net
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Rebuild an element withou, Michael Kay mike@xxx | Thread | Re: [xsl] Rebuild an element withou, Lizzi, Vincent vince |
Re: [xsl] Rebuild an element withou, Michael Kay mike@xxx | Date | Re: [xsl] Rebuild an element withou, Lizzi, Vincent vince |
Month |