xsl:stylesheet 中的参数化文档类型
如何将 --stringparam (xsltproc) 注入 XSL 样式表的 DOCTYPE 中? --stringparam 从命令行指定。
我有几本 docbook5 格式的书,我想使用相同的自定义层进行处理,每本书都有一个唯一的标识符,这里是“演示”,所以我正在运行类似的东西
xsltproc --stringparam course.name 演示 ...
每本书。
显然,该参数不会被识别为原样,而是被识别为逐字文本,从而给出错误:
警告:无法加载外部实体“http://edu.yet-another-project.com/course/$(course.name)/entities.ent”
这是我尝试过的方法,但行不通:
<?xml version='1.0'?>
<!DOCTYPE stylesheet [
<!ENTITY % myent SYSTEM "http://edu.yet-another-project.com/course/$(course.name)/entities.ent">
%myent;
]>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<!-- the docbook template used -->
<xsl:import href="http://docbook.org/ns/docbook/xhtml/chunk.xsl"/>
<!-- processor parameters -->
<xsl:param name="html.stylesheet">default.css</xsl:param>
<xsl:param name="use.id.as.filename">1</xsl:param>
<xsl:param name="chunker.output.encoding">UTF-8</xsl:param>
<xsl:param name="chunker.output.indent">yes</xsl:param>
<xsl:param name="navig.graphics">1</xsl:param>
<xsl:param name="generate.revhistory.link">1</xsl:param>
<xsl:param name="admon.graphics">1</xsl:param>
<!-- here more stuff -->
</xsl:stylesheet>
有想法吗?
How could I inject a --stringparam (xsltproc) into the DOCTYPE of a XSL stylesheet? The --stringparam is specified from the command line.
I have several books in docbook5 format I want to process with the same customization layer, each book having an unique identifier, here "demo", so I'm running something like
xsltproc --stringparam course.name demo ...
for each book.
Obviously the parameter is not recognized as such, but as verbatim text, giving the error:
warning: failed to load external entity "http://edu.yet-another-project.com/course/$(course.name)/entities.ent"
Here it is how I've tried, which won't work:
<?xml version='1.0'?>
<!DOCTYPE stylesheet [
<!ENTITY % myent SYSTEM "http://edu.yet-another-project.com/course/$(course.name)/entities.ent">
%myent;
]>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<!-- the docbook template used -->
<xsl:import href="http://docbook.org/ns/docbook/xhtml/chunk.xsl"/>
<!-- processor parameters -->
<xsl:param name="html.stylesheet">default.css</xsl:param>
<xsl:param name="use.id.as.filename">1</xsl:param>
<xsl:param name="chunker.output.encoding">UTF-8</xsl:param>
<xsl:param name="chunker.output.indent">yes</xsl:param>
<xsl:param name="navig.graphics">1</xsl:param>
<xsl:param name="generate.revhistory.link">1</xsl:param>
<xsl:param name="admon.graphics">1</xsl:param>
<!-- here more stuff -->
</xsl:stylesheet>
Ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
来自 http://www.w3.org/TR/xslt#output
因此,使用 XSLT 1.0 时,您无法参数化公共或系统 DOCTYPE 字符串。
来自 http://www.w3.org/TR/xslt20/#element-结果文档
在 XSLT 2.0 中,您可以使用 xsl:result-document 指令来完成该任务。
From http://www.w3.org/TR/xslt#output
So, when using XSLT 1.0 you can't parameterize public nor system DOCTYPE strings.
From http://www.w3.org/TR/xslt20/#element-result-document
In XSLT 2.0 you can use
xsl:result-document
instruction for that task.course.name
参数被提供给XSLT 处理器。但 XML 解析器 看到包含$(course.name)
的实体声明,并且解析器不知道如何处理它。实体无法扩展。您需要将
course.name
声明为样式表中的参数,然后在自定义模板中的某个位置引用它。The
course.name
parameter is given to the XSLT processor. But it is the XML parser that sees the entity declaration containing$(course.name)
, and the parser won't know what to do with that. The entity cannot be expanded.You need to declare
course.name
as a parameter in the stylesheet and then reference it somewhere in a custom template.