xsl:variable?</step>中<step>的含义是什么?

时间:2012-05-24 01:24:41

标签: xml xslt xslt-2.0

我不知道xsl:variable中的“步骤”。如果有人能解释“步骤”,我将不胜感激。

以下XSLT只在根元素中包含2个元素。

xsl:output定义输出格式; xsl:variable定义变量;

如何解析此代码?这段代码代表什么?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:saxon="http://saxon.sf.net/"
  version="2.0"
  extension-element-prefixes="saxon">

  <xsl:output method="html" omit-xml-declaration="yes"
    encoding="utf-8" indent="no"/>

  <!-- <xsl:output method="xml" omit-xml-declaration="no"
    encoding="utf-8" indent="no"/> -->

  <xsl:variable name="processes">
    <!-- exclude elements with @specific-use='print-only' -->
    <step>prep/jpub3-webfilter.xsl</step>
    <!-- format citations in NLM/PMC format -->
    <step>citations-prep/jpub3-PMCcit.xsl</step>
    <!-- convert into HTML for display -->
    <step>main/jpub3-html.xsl</step>
  </xsl:variable>

  <xsl:include href="main/shell-utility.xsl"/>

</xsl:stylesheet>

补充“shell-utility.xsl”

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:saxon="http://saxon.sf.net/"
  version="2.0"
  extension-element-prefixes="saxon">

  <!-- This stylesheet does not stand alone! It is a component
       to be called into XSLT 2.0 shell stylesheets. -->

  <xsl:variable name="document" select="/" saxon:assignable="yes"/>

  <xsl:param name="runtime-params">
    <base-dir>
      <xsl:value-of
        select="replace(base-uri(/), '/[^/]+$','')"/>     
    </base-dir>
  </xsl:param>

  <xsl:template match="/">
    <xsl:for-each select="$processes/step/concat('../',.)">
      <xsl:message>
        <xsl:text>&#xA;... Applying </xsl:text>
        <xsl:value-of select="."/>
      </xsl:message>
      <saxon:assign name="document"
        select="saxon:transform(
                  saxon:compile-stylesheet(doc(.)),
                  $document,
                  $runtime-params/* )"/>
      <!-- A third argument to saxon:transform could specify
           runtime parameters for any (or all) steps -->
    </xsl:for-each>
    <xsl:sequence select="$document"/>
    <xsl:message>&#xA;... Done</xsl:message>
  </xsl:template>

</xsl:stylesheet>

2 个答案:

答案 0 :(得分:3)

代码只创建一个名为processes的变量,并为其分配一个包含三个<step>元素的节点列表。就XSL解析器而言,<step>元素本身没有任何意义。

答案 1 :(得分:1)

  

这段代码代表什么?

 <xsl:variable name="processes">     
  <!-- exclude elements with @specific-use='print-only' -->     
  <step>prep/jpub3-webfilter.xsl</step>     
  <!-- format citations in NLM/PMC format -->     
  <step>citations-prep/jpub3-PMCcit.xsl</step>     
  <!-- convert into HTML for display -->     
  <step>main/jpub3-html.xsl</step>   
 </xsl:variable>

这是名为processes且类型为document-node()的全局变量的定义 - 其值是一个临时树,其中包含三个step元素,这些元素是文档节点的子元素。

如何使用此变量取决于所包含的样式表模块的代码: main/shell-utility.xsl。由于未提供此代码,因此无法对processes变量的实际用法进行任何说明。