我正在尝试创建一个如下指定的网格:
<Node>
<UI>Grid</UI>
<Rows>3</Rows>
<Cols>3</Cols>
<Node>stuff</Node>
<Node>stuff</Node>
<Node>stuff</Node>
...
</Node>
我想使用 Bootstrap,所以我有
<xsl:template match ="Node[UI[contains(., 'Grid')]]">
<div class ="container-fluid">
<xsl:apply-templates select="Node" mode="Grid"/>
</div>
</xsl:template>
进而:
<xsl:template match ="=Node" mode="Grid">
<div class ="col-lg-???">
<xsl:apply-templates />
</div>
</xsl:template>
最后一部分,col-lg-???应该以某种方式使用节点的位置作为网格节点内的子节点来计算所需的标签,以便正确创建网格。最终,一个 网格将有 9 个节点,我想像这样自动对它们进行排序:
只需使用它们在网格节点内的位置即可。我知道我最终还需要考虑在容器内划船,对此也不确定。Cols
通常会推断
经过Cols = Children/Rows
.
输出应该类似于:
<div class = "container">
<div class ="row">
<div class = "col-lg-4" ></div>
<div class = "col-lg-4" ></div>
<div class = "col-lg-4" ></div>
</div>
<div class ="row">
<div class = "col-lg-4" ></div>
<div class = "col-lg-4" ></div>
<div class = "col-lg-4" ></div>
</div>
<div class ="row">
<div class = "col-lg-4" ></div>
<div class = "col-lg-4" ></div>
<div class = "col-lg-4" ></div>
</div>
</div>
EDIT:
如果只有一行,这似乎可以完成工作:
<div class ="col-lg-{12 div count(../Node)}">
<xsl:apply-templates />
</div>
但不确定行部分。
EDIT2:
到目前为止我所拥有的:
<xsl:template match ="//Sub/Node">
<xsl:if test="count(./preceding-sibling::*) mod (count(../Node) div ../../Rows/text()) = 0">
<div class ="row"></div>
</xsl:if>
<div class ="col-lg-{12 div count(../Node)}">
<xsl:apply-templates />
</div>
<xsl:if test="count(./preceding-sibling::*) mod (count(../Node) div ../../Rows/text()) = 1">
<div class ="rowclose"></div>
</xsl:if>
</xsl:template>
rowclose 只是用于表示法,当我在上面的 if 语句中打开一个 div 并在第二个语句中关闭它时,它似乎不喜欢它。我会尝试解决这个问题。结果:
<div class="container-fluid">
<div class="row"></div>
<div class="col-lg-3"></div>
<div class="col-lg-3"></div>
<div class="rowclose"></div>
<div class="row"></div>
<div class="col-lg-3"></div>
<div class="col-lg-3"></div>
<div class="rowclose"></div>
</div>