代码之家  ›  专栏  ›  技术社区  ›  jeph perro

如何将参数传递给XSLT?

  •  5
  • jeph perro  · 技术社区  · 14 年前

    我有问题。

    我有一个包含100门课程信息的XML文件。

    我有一个XSL文件,可以很好地显示100门课程的列表。

    但是如果我只想显示一个课程呢?我可以给XSLT文件传递一个参数,告诉它只显示“engl 100”吗?

    XML如下所示:

    <document>
    <menu>
       <item>
          <name>MTH 300</name>
          <brief>Mathematics Skill Development</brief>
          <description>A course in the fundamentals of ...</description>
       </item>
       <item>
          <name>MTH 301</name>
          <brief>Basic Algebra</brief>
          <description>An introduction to algebra, ...</description>
       </item>
     ...
    

    我知道我可以写一个名为“eng100.xsl”的XSLT文件来循环XML,只显示eng100,但我不想写几十个这样的文件。

    XML是动态的,我可以控制它。我希望XSLT文件是静态的,永远不会更改。

    是否有任何方法可以将参数传递到XSLT中?

    1 回复  |  直到 14 年前
        1
  •  7
  •   mdma    14 年前

    您可以将参数传递给XSLT,这取决于您的XSLT处理器,但如果它是命令行处理器,则通常作为附加的命令参数。

    声明参数时使用

      <xsl:param name="courseName" select"initialValue"/>
    

    然后可以在XSLT中测试此参数,并根据其值调用其他模板。例如,如果参数为空,则调用处理所有元素的当前模板,否则调用仅在项名称等于参数值时处理元素的模板。你可以通过测试来做到这一点

       <xsl:template match="item">
          <xsl:if test="$courseName=name(./name)">
             <xsl:call-template name="yourOriginalTemplate"/>
          </xsl:if>
       </xsl:template>
    

    但是通过过滤和格式化,您在一个文件中混合了两个关注点。我将从格式化中分离出XML元素的选择——为此有两个XSLT文件,并将它们作为管道运行。