Re: [xsl] Rebuild an element without copying defaulted attributes?

Subject: Re: [xsl] Rebuild an element without copying defaulted attributes?
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 12 Aug 2014 16:45:36 -0000
There's no processor-independent way of preventing default attributes being
expanded. But some XML parsers have an option to disable this.

Saxon has an option -expand:off on the command line, or
FeatureKeys.EXPAND_ATTRIBUTE_DEFAULTS in the Java API, which switches this
behaviour on if you're using a parser that supports it.

Michael Kay
Saxonica
mike@xxxxxxxxxxxx
+44 (0) 118 946 5893




On 12 Aug 2014, at 17:22, dvint@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> I have a situation where I need to process 4,000 DITA topics to update
> them. I'm making updates which will then be included in the production
> data going forward. I need to modify certain elements and pass others
> through unchanged.
>
> My problem is the unchanged.
>
> So there is an element <pre> that has a defaulted @xml:space set to
> preserve. When I rebuild this element and recreate all the existing
> attributes my output now has a hard coded attribute setting.
>
> So
>
>    <pre ixia_locid="7">there's also the Duplicate Supplier Taxpayer ID
> Number Report</pre>
>
> became
>
> <pre ixia_locid="7" xml:space="preserve">there's also the Duplicate
> Supplier Taxpayer ID Number Report</pre>
>
> It seems like the only way I can avoid getting the defaulted attributes
> copied is to remove the reference to the DTD in all the topics. Is there
> any other way to accomplish this?
>
> Currently I'm using this template:
>
> <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>

Current Thread