这是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>
我已将所有内容都删除,以便传达手头的问题。 SectionHeading 模板无法正常使用此位:
<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>
但现在我只得到&#34; //标签/ LAC&#34;作为我输出中的实际文本。
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>
但它违背了使用模板方法的目标。
答案 0 :(得分:1)
在XSLT 3.0之前,无法评估动态创建的XPath表达式(XSLT 3.0获取xsl:evaluate
)。
但在这种特殊情况下,以下静态XPath表达式将起作用:
<div class="text{$strSection}">
<xsl:value-of select="//Labels/*[name() = $strSection]"/>
</div>