xsl-list
[Top] [All Lists]

Re: [xsl] Trying to remove default namespace declaration in output

2019-03-05 10:32:32

    
Thanks, I was just recognizing the xsl:copy was generating the name space info. 
In DITA the name space I believe us more for the version attribute that is 
defaulted in the DTD as well. The content doesn't leverage the namespace.Sent 
from my T-Mobile 4G LTE Device

-------- Original message --------
From: "Michael Kay mike(_at_)saxonica(_dot_)com" 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 
Date: 3/5/19  8:06 AM  (GMT-08:00) 
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
Subject: Re: [xsl] Trying to remove default namespace declaration in output 

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 KaySaxonica On 5 Mar 2019, at 
15:46, dvint(_at_)dvint(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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

EasyUnsubscribe
(by email)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>