0
はXSLです:XSLテンプレートパラメータをselect文に含めるにはどうすればよいですか?ここ
<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>
しかし、今、私は私の出力での実際のテキストとして "//ラベル/ 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>
しかし、それはテンプレートメソッドを使用するオブジェクトを敗北させます。
ビンゴを! Spot on - これまでずっと感謝しています。 :) –
ところで、 '//Labels'が実際にあなたが望むものであることを再確認してください。相対的な表現はここでよりスマートな選択かもしれません。 – Tomalak
いいえ、これは複数回繰り返されるラベルを持つルートノードです。私は30種類以上の言語をサポートしているので、このようにしています。そのため、作成時にラベルを動的に置き換える汎用テンプレートを1つ保持します。それ以外の場合は、ラベル値をXMLノード内で毎回複製する必要があります。 –