这是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>