Re: [xsl] Doctype and namespaces in source/generated files

Subject: Re: [xsl] Doctype and namespaces in source/generated files
From: Mayo <mayo@xxxxxxx>
Date: Fri, 28 May 2004 15:44:16 -0700
<snip />
<xsl:template match="*[not(namespace-uri())]">
than I simply xsl:copy, and apply templates. This prevents me to
specify DOCTYPE or namespaces for xhtml in the source documents, as as
soon as I specify them (in the source documents) the match rule will
stop working, and strips all my xhtml out.


So close, and yet...


Why not use:

<xsl:template match="*[namespace-uri()='http://www.w3.org/1999/xhtml']">

instead then?


because this will either strip out all html tags, or when negated, will not apply templates on my custom namespaces.


If the result document has to be in the XHTML namespace, define:

xmlns="http://www.w3.org/1999/xhtml";

on your xsl:stylesheet element.


It is xhtml at the moment (and what I want to use this for, but did not want to limit myself only to xhtml, but it will do for now).


Anyway, adding this to the xsl:stylesheet does not insert the xmlns attribute into the <html> element in output (I'm copying the <html> element, not generating it) Now that I'm thinking about it, I could match on the html element, and add/remove attributes as required.

Use the exclude-result-prefixes attribute on xsl:stylesheet to omit other
namespaces in scope for the stylesheet.



Yes, this will remove the prefixes from the elements, however it will not remove the xmlns declaration in the <html> element on top of the document (I'm not really concerted with removing them, as they do no harm, but it would certainly be cleaner. I'm more concerned about adding new ones in.)


For adding the doctype, check the applicable attributes for the xsl:output
element. Use XML as output method, and add doctype-public and doctype-system
with the appropriate values.



I've found this meantime, and the doctype is added into output, thanks.



Thanks, Mayo

Current Thread