Subject: Re: [xsl] Q: Stripping ns from source tree? From: Niclas Olofsson <niclas.olofsson@xxxxxxxxxxxx> Date: Mon, 27 Aug 2001 01:14:47 +0200 |
Hi Francis, Ok, looks interesting. Trying that next. Here is what I've got so far (on my own). I changed the namespacing in the original XML to only use default namespaces where it did apply. I ended up with nested namspaces (mf in html in mf .. etc) which only made it worse. So, applying a default namespace to all elements (most of it by inheritence) made the stylesheet work. In brief (this is not the actual stuff) it looks something like: <xsl:template match="html:*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates select="*"/> </xsl:copy> </xsl:template> But it didn't really solve much of my original problem. So what I'll have to do is apply your local-name() patch to it and I should be homesafe. Thanks, /Niclas Francis Norton wrote: > > Hi Niclas, > > Niclas Olofsson wrote: > > > > Basically my problem is that the source tree I'm using have 2 different > > namespaces, one for html and one for my own format ("mf"). > > > The problem is fairly simple once you understand what's going on. > > First thing - exclude-result-prefixes and xsl:exclude-result-prefixes > only exclude namespace declarations for namespaces which are *unused* in > the output. You can't use them to strip namespaces from elements or > attributes which would otherwise have them. > > Your example uses namespaces in the output in two ways: > > [1] you've registered a default namespace for all your literal result > HTML elements > > [2] you copy HTML-namespace elements in the source document > > So first get rid of that default xmlns="http://www.w3.org/TR/REC-html40" > in the stylesheet - you don't need it, after all, since you want your > result elements to be simple HTML. > > Next, let's match any HTML-namespace elements in the source documents > and automatically create the equivalent element in the output, but not > in any namespace. We'll use xsl:element for this, with the new element > name coming from the local-name() of the original. > > OK, here's the stylesheet that implements these two steps, it's tested > and works with saxon and msxsl - > > <?xml version="1.0"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:html="http://www.w3.org/TR/REC-html40" > xmlns:mf="myformat" > exclude-result-prefixes="html mf" > > > > <xsl:output method="html" omit-xml-declaration="yes"/> > > <xsl:template match="/"> > <HTML > > > <BODY> > <xsl:apply-templates/> > </BODY> > </HTML> > </xsl:template> > > <xsl:template match="mf:*"> > <!-- do nothing right now --> > <xsl:apply-templates/> > </xsl:template> > > <xsl:template match="html:*"> > <xsl:element name="{local-name()}"> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > </xsl:stylesheet> > > Hope this helps - > > Francis. > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list -- Niclas Olofsson - http://www.ismobile.com Product Development, isMobile, Aurorum 2, S-977 75 Luleå, Sweden Phone: +46(0)920-75550 Mobile: +46(0)70-3726404 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Q: Stripping ns from sour, Francis Norton | Thread | [xsl] Hardcoded text put into varia, Ragulf Pickaxe |
Re: [xsl] Q: Stripping ns from sour, Francis Norton | Date | [xsl] Hardcoded text put into varia, Ragulf Pickaxe |
Month |