Subject: Re: [xsl] Trying to remove default namespace declaration in output From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 5 Mar 2019 16:06:33 -0000 |
xmlns:ditaarch is a namespace, not an attribute (namespaces are not attributes in the XDM data model). The way to drop a namespace depends on whether the namespace is actually used or not. Sometimes when people say they want to drop a namespace declaration, what they actually want to do is to move the elements into a different namespace. From your question, it's not clear whether that is the case here. To drop an unused namespace, in XSLT 2.0 you can do <xsl:copy copy-namespaces="no">, while in 1.0 you need to use <xsl:element name="{local-name()}">. To move an element into a different namespace, you have to use <xsl:element> rather than <xsl:copy>. You template rule for attributes could be replaced with the much simpler: > <xsl:template name="processAtrbiutes"> > <xsl:apply-templates select="./@*"/> > </xsl:template> <xsl:template match="@class | @domains | @DITAArchVersion | @ux-source-priority"/> <xsl:template match="@*"><xsl:copy/></xsl:template> Michael Kay Saxonica > > > On 5 Mar 2019, at 15:46, dvint@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > I'm using XSLT to process DITA topics. This is a conversion/cleanup effort to try and normalize our content before loading into a new CMS. So basically doing an identity transformation with some random modifications. > > In the DTD is the definition xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/" > > This is the primary template that is doing the transformation > > <xsl:template match="node()" priority="-10"> > <xsl:copy> > <xsl:call-template name="processAtrbiutes"/> > <xsl:apply-templates select="node()"/> > </xsl:copy> > </xsl:template> > > > > And this is the template that I have handling the attributes > > > > > <xsl:template name="processAtrbiutes"> > <xsl:for-each select="./@*"> > <xsl:choose> > <xsl:when test="name(.) = 'class'"> > <!-- Remove --> > </xsl:when> > <xsl:when test="name(.) = 'domains'"> > <!-- Remove --> > </xsl:when> > <xsl:when test="local-name(.) = 'DITAArchVersion'"> > <!-- Remove --> > </xsl:when> > <xsl:when test="local-name(.) = 'ditaarch'"> > <!-- Remove --> > </xsl:when> > <xsl:when test="local-name(.) = 'ux-source-priority'"> > <!-- Remove --> > </xsl:when> > <xsl:otherwise> > <xsl:attribute name="{local-name(.)}" select="."/> > </xsl:otherwise> > </xsl:choose> > </xsl:for-each> > </xsl:template> > > > > Basically I want to copy the attributes in the XML file that have been applied and remove anything that has a default in the DTD. > > > > I have the ditaarch test here that is doing no good, but the other tests do what they are supposed to. For the namespace I tried declaring this namespace on the <xsl:stylesheet> element and then exclude it but that didn't work either. > > > > Any suggestions? > > > > ..dan > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Trying to remove default name, dvint@xxxxxxxxx | Thread | Re: [xsl] Trying to remove default , Eliot Kimber ekimber |
Re: [xsl] XSLT repetition construct, Michael Kay mike@xxx | Date | Re: [xsl] Trying to remove default , dvint dvint@xxxxxxxx |
Month |