XSLT:如果没有输入文件,如何触发模板?

Ben*_*ank 3 xslt

我正在创建一个模板,该模板基于单个字符串生成输出,通过参数传递,并且不使用输入XML文档. xsltproc似乎很高兴使用指定样式表的单个参数运行,但我没有看到在没有输入文件的情况下触发模板的方法(例如,没有参数xsltproc来运行命名模板).

我希望能够运行:

xsltproc --stringparam bar baz foo.xsl
Run Code Online (Sandbox Code Playgroud)

但我现在必须运行,"主"模板匹配"/":

echo '<xml/>' | xsltproc --stringparam bar baz foo.xsl -
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?我确定我在过去看过其他模板,这些模板本来是在没有输入文档的情况下运行的,但我不记得它们是如何工作的或者在哪里再次找到它们.:-)

Dim*_*hev 9

实际上,这已经经常发生了.

XSLT 2.0中,它在Spec中定义.提供初始上下文节点是可选的.如果没有提供初始上下文节点(没有源XML文档),则提供要作为转换入口点执行的命名模板的名称非常重要.

XSLT 1.0中,可以为转换提供其自己的主样式表模块(文件)作为源XML文档,当然,转换可以完全忽略此源XML文档.这种技术很久以前就已被Jeni Tennison证明和使用.

例如:

<?xml-stylesheet type="text/xsl" href="example.xml"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
      <p>Hello, world!</p>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

当上述代码保存在名为"example.xml"的文件中,然后使用Windows资源管理器显示文件夹内容时,双击文件"example.xml"将打开IE并生成:

你好,世界!