私はXSLにまったく慣れておらず、テンプレートを使用してXMLファイルからノードを動的に参照しようとしています。
もう少し情報を提供するために、Cast Ironを使用して初期XMLを生成すると、複数の結果セットが返されます。その中には、複数の行を持つものもあります。サンプルXMLは次のとおりです。
<resultSets>
<resultSet/>
<resultSet>
<row>
<column1>1</column1>
<column2>Hello</column2>
</row>
</resultSet>
<resultSet>
<row>
<column1/>
</row>
<row>
<column1/>
</row>
</resultSet>
</resultSets>
だから私はこれをお客様が使えるものに変えようとしています。生活を楽にするために、いくつかの入力を含むテンプレートを使用することを考えました。
結果セットの番号、行の番号、および列の名前を入力することで、データを参照するテンプレートを設計したかったのです。問題は、それを参照すると、結果のノードが作成されないことです。だから私の質問は:ParamをXmlノードとして参照するにはどうすればよいですか?
これが私がテンプレートのために持っているものです:
<xsl:template name="getData">
<xsl:param name="resultset" select="0" />
<xsl:param name="position" select="0" />
<xsl:param name="column-name" select="''" />
<!-- Checking to see if Parameters were passed in. This seems to work correctly -->
<xsl:if test="($resultset > 0)and($position > 0)and($column-name != '')">
<!-- Check to see if there are any rows in the resultSet. This seems to work correctly -->
<xsl:if test="count(//resultSets/resultSet[position() = $resultset]/row[position() = $position]) > 0">
<!-- This part fails; nothing is referenced -->
<xsl:value-of select="//resultSets/resultSet[position() = $resultset]/row[position() = $position][@name = $column-name]"/>
</xsl:if>
</xsl:if>
</xsl:template>
これが私がそれを参照しようとしている方法です(例として):これはXMLファイルから「Hello」を返すはずです(そうではありませんか?)
<xsl:element name="SampleElement">
<xsl:call-template name="getData">
<xsl:with-param name="resultset" select="2" />
<xsl:with-param name="position" select="1" />
<xsl:with-param name="column-name" select="'column2'" />
</xsl:call-template>
</xsl:element>
質問が不明な場合や以前に質問されたことがある場合は、申し訳ありませんが、何も見つかりませんでした。