我對XSL相當陌生,我試圖使用模板從XML文件動態引用節點。XSL動態節點參考
爲了提供更多信息,我使用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文件恢復「你好」(不該」那麼它呢?)
<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>
對不起,如果我的問題不清楚或之前已經問過,我什麼也沒找到。
您的行元素沒有@name屬性 –