【发布时间】:2017-09-27 15:09:27
【问题描述】:
我试图用 XSLT 表示一个输入字段可以是 text 或 number 的表。我在 XML 中有一个包含列号和行号的标签。进入headerName标签,我有表格的表头信息。
这是我的 XML 示例:
<elements>
<element type="TABLE">
<id>table2</id>
<order>49</order>
<table>
<colNumber>2</colNumber>
<headerName>
<amount>false</amount>
<value>Header1</value>
</headerName>
<headerName>
<amount>true</amount>
<value>Header2</value>
</headerName>
<rowNumber>2</rowNumber>
</table>
</element>
</elements>
现在,我使用的 XSLT 是:
<xsl:for-each select="elements/element">
<xsl:if test="@type='TABLE'">
<div data-order="{order}" id="{id}">
<table class="table table-bordered mt-lg">
<thead>
<tr>
<xsl:for-each select="table/headerName">
<td>
<xsl:value-of select="value"/>
</td>
</xsl:for-each>
</tr>
</thead>
<tbody>
<xsl:variable name="rows" select="table/rowNumber/text()"/>
<xsl:variable name="cols" select="table/colNumber/text()"/>
<xsl:variable name="amount" select="table/headerName/amount/text()"/>
<xsl:for-each select="(//node())[$rows >= position()]">
<tr>
<xsl:for-each select="(//node())[$cols >= position()]">
<td>
<xsl:choose>
<xsl:when test="$amount = 'false'">
<input type="text"/>
</xsl:when>
<xsl:otherwise>
<input type="number"/>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</tbody>
</table>
</div>
</xsl:if>
</xsl:for-each>
我的预期输出是这样的:
<div data-order="49" id="table2">
<table class="table table-bordered mt-lg">
<thead>
<tr>
<td>
Header1
</td>
<td>
Header2
</td>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text"></input></td>
<td><input type="number"></input></td>
</tr>
<tr>
<td><input type="text"></input></td>
<td><input type="number"></input></td>
</tr>
</tbody>
</table>
</div>
我没有看到错误在哪里,我尝试过使用 xpath 表达式,但我总是得到<input type="text"/>
【问题讨论】: