在应用模板之前添加虚节点(具有变量输入节点的cals表计数)

时间:2016-03-29 10:16:54

标签: xslt-1.0

我正在转换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;
&#13;
&#13;

最后我需要

&#13;
&#13;
<Cell … >a</Cell>
<Cell … >b</Cell>
<Cell … ></Cell>
<Cell … ></Cell>
<Cell … >1</Cell>
<Cell … >2</Cell>
<Cell … >3</Cell>
<Cell … >4</Cell>
&#13;
&#13;
&#13;

所以我想添加两个虚拟&#34;条目&#34;节点,因此它们将被模板平等转换。

&#13;
&#13;
<xsl:apply-template select="entry"/>
&#13;
&#13;
&#13;

我清楚了吗?

TIA Loic

2 个答案:

答案 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>