Subject: Re: [xsl] Dynamic DTD declaration in output From: "Mukul Gandhi gandhi.mukul@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 15 May 2019 06:18:20 -0000 |
Following is one approach that I can come up with (tested with Xalan-J), Assuming there's following XSLT stylesheet (main.xsl), <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output doctype-system="/path/to/docs.dtd" method="xml" encoding="UTF-8" /> <xsl:template match="test"> <!-- stylesheet logic --> </xsl:template> </xsl:stylesheet> Following is a pre-process stylesheet (preprocess.xsl. uses an identity transform, and modifying the value of attribute xsl:output/@doctype-system via a stylesheet parameter), <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:param name="DTDPath"/> <xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <xsl:template match="@doctype-system"> <xsl:attribute name="doctype-system"> <xsl:value-of select="$DTDPath"/> </xsl:attribute> </xsl:template> </xsl:stylesheet> We can then run the transformation as follows, java org.apache.xalan.xslt.Process -in main.xsl -xsl preprocess.xsl -param DTDPath mypath.dtd The output produced by above transformation is following, <?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output doctype-system="mypath.dtd" method="xml" encoding="UTF-8"/> <xsl:template match="test"> <!-- stylesheet logic --> </xsl:template> </xsl:stylesheet> The above output, can then be used to transform your actual XML document. The above preprocess transformation could be followed by your actual transformation (the two transformations could be joined via a batch file or a shell script), to produce the desired output. On Wed, May 15, 2019 at 11:14 AM Trevor Nicholls trevor@xxxxxxxxxxxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Hi > > > > I've got a simple stylesheet which is executed as a pre-process when XML > documents are loaded into FrameMaker. At the moment the stylesheet includes > the line > > > > <xsl:output doctype-system="/path/to/docs.dtd" method="xml" > encoding="UTF-8" /> > > > > Because this stylesheet will be used by different users in several > different contexts, it would be brilliant if the path to the DTD could be > parameterised. I know the following is invalid but the purpose of this post > is to ask if there is any way of engineering an equivalent: > > > > <xsl:param name="DefaultDTDPath" /> > > <xsl:output doctype-system="{$DefaultDTDPath}" method="xml" > encoding="UTF-8" /> > > > > XSL version has to be 1.0 or 2.0. > > > > Thanks > > T > -- Regards, Mukul Gandhi
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Dynamic DTD declaration in ou, Trevor Nicholls trev | Thread | Re: [xsl] Dynamic DTD declaration i, Michael Kay mike@xxx |
[xsl] Dynamic DTD declaration in ou, Trevor Nicholls trev | Date | Re: [xsl] Dynamic DTD declaration i, Michael Kay mike@xxx |
Month |