如何在选择语句中包含 XSL 模板参数



这是XSL:

  <xsl:template match="LAC">
    <table class="tableLAC">
      <tr>
        <xsl:call-template name="SectionHeading">
          <xsl:with-param name="strSection">LAC</xsl:with-param>
          <xsl:with-param name="iSpanColumns">3</xsl:with-param>
        </xsl:call-template>
      </tr>
    </table>
  </xsl:template>
  <xsl:template name="SectionHeading">
    <xsl:param name="strSection"/>
    <xsl:param name="iSpanColumns"/>
    <tr>
      <td class="cell{$strSection}" colspan="{$iSpanColumns}">
        <div class="text{$strSection}">
          <xsl:value-of select="concat('//Labels/', {$strSection})"/>
        </div>
      </td>
    </tr>
  </xsl:template>

我已经剥离了所有内容以传达手头的问题。章节标题模板不适用于此位:

<xsl:value-of select="concat('//Labels/', {$strSection})"/>

事实上,它告诉我{是一个意想不到的令牌。我似乎做不好。我正在尝试实现这一点(如果我要手动编写它):

<xsl:value-of select="//Labels/LAC"/>

谢谢你的帮助。

更新:

我把它修改成这样:

  <xsl:template name="SectionHeading">
    <xsl:param name="strSection"/>
    <xsl:param name="iSpanColumns"/>
    <tr>
      <td class="cell{$strSection}" colspan="{$iSpanColumns}">
        <div class="text{$strSection}">
          <xsl:value-of select="concat('//Labels/',$strSection)"/>
        </div>
      </td>
    </tr>
  </xsl:template>

但是现在我只在输出中得到"//标签/LAC"作为实际文本。

该 XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="WEEK-S-140.xsl"?>
<MeetingWorkBook>
  <Labels>
    <TFGW>TREASURES FROM GOD'S WORD</TFGW>
    <AYFM>APPLY YOURSELF TO THE FIELD MINISTRY</AYFM>
    <LAC>LIVING AS CHRISTIANS</LAC>
  </Labels>
</MeetingWorkBook>

XML已被削减。

更新:

困惑。这也不起作用:

  <xsl:template name="SectionHeading">
    <xsl:param name="strSection"/>
    <xsl:param name="iSpanColumns"/>
    <tr>
      <td class="cell{$strSection}" colspan="{$iSpanColumns}">
        <div class="text{$strSection}">
          <xsl:variable name="strPath">
            <xsl:value-of select="concat('//Labels/',$strSection)"/>
          </xsl:variable>
          <xsl:value-of select="$strPath"/>
        </div>
      </td>
    </tr>
  </xsl:template>

但是如果我覆盖:

  <xsl:template name="SectionHeading">
    <xsl:param name="strSection"/>
    <xsl:param name="iSpanColumns"/>
    <tr>
      <td class="cell{$strSection}" colspan="{$iSpanColumns}">
        <div class="text{$strSection}">
          <xsl:value-of select="//Labels/LAC"/>
        </div>
      </td>
    </tr>
  </xsl:template>

后者有效。所以这也有效:

  <xsl:template name="SectionHeading">
    <xsl:param name="strSection"/>
    <xsl:param name="iSpanColumns"/>
    <tr>
      <td class="cell{$strSection}" colspan="{$iSpanColumns}">
        <div class="text{$strSection}">
          <xsl:choose>
            <xsl:when test="$strSection='TFGW'">
              <xsl:value-of select="//Labels/TFGW"/>
            </xsl:when>
            <xsl:when test="$strSection='AYFM'">
              <xsl:value-of select="//Labels/AYFM"/>
            </xsl:when>
            <xsl:when test="$strSection='LAC'">
              <xsl:value-of select="//Labels/LAC"/>
            </xsl:when>
          </xsl:choose>
        </div>
      </td>
    </tr>
  </xsl:template>

但它破坏了使用模板方法的目的。

在 XSLT 3.0 之前,无法计算动态创建的 XPath 表达式(XSLT 3.0 xsl:evaluate )。

但在这种特殊情况下,以下静态 XPath 表达式将起作用:

<div class="text{$strSection}">
  <xsl:value-of select="//Labels/*[name() = $strSection]"/>
</div>

相关内容

  • 没有找到相关文章