我正在转换CALS表,行父节点可以托管不同的入口节点数。我在看"均衡"应用模板之前的节点计数以保持连贯性。 否则我想我可以故意调用模板,但它看起来很笨重。 说CALS行数据在哪里:
<row>
<entry>a</entry>
<entry>b</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
</row>
&#13;
最后我需要
<Cell … >a</Cell>
<Cell … >b</Cell>
<Cell … ></Cell>
<Cell … ></Cell>
<Cell … >1</Cell>
<Cell … >2</Cell>
<Cell … >3</Cell>
<Cell … >4</Cell>
&#13;
所以我想添加两个虚拟&#34;条目&#34;节点,因此它们将被模板平等转换。
<xsl:apply-template select="entry"/>
&#13;
我清楚了吗?
TIA Loic
答案 0 :(得分:1)
实际问题是如何确定一个If Me.Option18.Value = True Then
DoCmd.OpenQuery "Logbook Query all available"
End If
中entry
的最大数量,对吧?
在XPath 3.1(XSLT 2.0)中,您可以使用类似row
的内容。但是你标记了你的问题&#34; xslt-1.0&#34;,所以你必须自己编写一个max(//row/entry[last()]/count(preceding-sibling::*))+1
模板。或者使用完全不同的方法。
答案 1 :(得分:1)
使用XSLT 1.0,您可以尝试 使用最大条目创建变量:
<xsl:variable name="maxentries">
<xsl:for-each select="//row" >
<xsl:sort select="count(entry)" order="descending"/>
<xsl:if test="position() = 1">
<xsl:value-of select="count(entry)" />
</xsl:if>
</xsl:for-each>
</xsl:variable>
用于创建cnt
空&#34;单元格&#34;:
<xsl:template name="emptyCell">
<xsl:param name="cnt"/>
<xsl:if test ="$cnt > 0">
<Cell/>
<xsl:call-template name="emptyCell">
<xsl:with-param name="cnt" select="$cnt - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
用例如:
<xsl:template match="row">
<xsl:apply-templates select="entry" />
<xsl:call-template name="emptyCell">
<xsl:with-param name="cnt" select="$maxentries - count(entry)" />
</xsl:call-template>
</xsl:template>