Subject: Re: Copy the Document Type Definition of XML file
From: Andrew Welch <andrew.j.welch@xxxxxxxxx>
Date: Tue, 15 Dec 2009 09:42:13 +0000
|
2009/12/15 Rossen Kovachev <kovachev@xxxxxxxx>:
> Hi!
>
> I'm trying to copy resp. to modify an XML document via XSL. Here I use
> the usual identity template:
>
> <xsl:template match="@*|node()">
> <xsl:copy>
> <xsl:apply-templates select="@*|node()"/>
> </xsl:copy>
> </xsl:template>
>
> Unfortunately the DTD definition of the source document is not copied at
> this way.
>
> Does anybody know how can I accomplish this?
I would say that unless you absolutely have to, don't bother. If you
need the XML validated again at a subsequent step then do it in that
step, rather than each and every time the XML is parsed...
If you do really have to :) then you could use LexEv
(http://andrewjwelch.com/lexev/) which will add the values as
processing instructions to the input, for example:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
will become:
<?doctype-public -//W3C//DTD XHTML 1.0 Transitional//EN?>
<?doctype-system http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd?>
which you can then use like this:
<xsl:result-document
doctype-public="{processing-instruction('doctype-public')}"
doctype-system="{processing-instruction('doctype-system')}">
LexEv is also part of Kernow, so to try this out just enable it in the
options.
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
|