使用子位置在 XSLT 中创建网格

2024-03-31

我正在尝试创建一个如下指定的网格:

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

我不是 100% 清楚你想要实现什么,但我认为你正在尝试每行创建三个“节点”,将每一行封装在一个div元素。

如果是这样,您应该首先选择Node将成为每行中第一个元素的元素(其中$cols是一个变量,保存一行中的节点数)

<xsl:apply-templates select="Node[position() mod $cols = 1]" mode="row"/>

(这里需要“行”模式,因为您最终会得到两个匹配的模板Node)

或者,如果您想限制行数,如果节点数量超过您需要的数量,您可以这样做(“Position()”是上下文相关的,并且与您刚刚选择的节点相关,不一定是它们在树中的位置)

<xsl:apply-templates select="Node[position() mod $cols = 1][position() &lt;= $rows]" mode="row"/>

然后你就会有一个与此匹配的模板,处于“行”模式

要选择行中的节点,请执行以下操作

<xsl:apply-templates select="self::*|following-sibling::Node[position() &lt; $cols]" mode="cell"/>

然后你会有第二个模板匹配Node对于单元格,您可以在其中输出带有类的 div (其中lg是一个保存表达式的变量,以避免重复重新计算)

试试这个 XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output omit-xml-declaration="yes" indent="yes" />
   <xsl:variable name="cols" select="/*/Cols" />
   <xsl:variable name="rows" select="/*/Rows" />
   <xsl:variable name="lg" select="12 div number(/*/Cols)" />

   <xsl:template match="/*">
     <div class="container">
        <xsl:apply-templates select="Node[position() mod $cols = 1][position() &lt; $rows]" mode="row"/>
     </div>
   </xsl:template>

   <xsl:template match="Node" mode="row">
     <div class="row">
        <xsl:apply-templates select="self::*|following-sibling::Node[position() &lt;= $cols]" mode="cell"/>
     </div>
   </xsl:template>

   <xsl:template match="Node" mode="cell">
     <div class="col-lg-{$lg}">
        <xsl:apply-templates />
     </div>
   </xsl:template>
</xsl:stylesheet>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用子位置在 XSLT 中创建网格 的相关文章

随机推荐

  • R xts 对象将 xts 对象子集为特定小时内多天的日内数据

    xts 对象中有没有办法执行与下面相同的操作 但对于具有多天日内数据的 xts 对象 下面的工作原理就像一个时钟 但只显示一天的数据 如果我从 22 号到 26 号通过 xts 它就不会 似乎无法一次性完成多天 xts 中的日内数据子集化
  • 在 Spark 中堆叠 ML 算法

    是否有 Spark api 可以在 Spark 中构建堆叠集成 或者应该从头开始构建它们 我在网上没有找到有关此主题的任何资源 正如 AKSW 的评论中所说 在当前的 Apache Spark MLlib 中 Ensemble Models
  • 在打字稿中使用react-redux连接

    我尝试使用 redux 和 react router dom 在 typescript 中构建一个 React 应用程序 当我将 redux 添加到我的应用程序时 我遇到了打字问题 因此 我创建了以下只有一页的最小示例测试页 App jsx
  • 关于比奈公式的一些知识

    为什么比奈公式 O LogN 但不完全是 在时间上比迭代方法 O n 效果更差 static double SQRT5 Math Sqrt 5 static double PHI SQRT5 1 2 public static int Bi
  • 使用nl2br将textarea新行保留到mysql...如何很好地将数据返回到文本框?

    我有一个带有文本区域的表单 其结果被插入到 mysql 数据库中 我使用 nl2br 来保留换行符 但是 因为这会在文本中插入 br 所以当用户去编辑他们在文本区域中输入的内容时 它会显示文本区域中保存在 mysql 中的所有 br 对于不
  • 编写 MVVM 样板代码的更好方法?

    我发现自己最近编写了很多样板 MVVM 代码 并且想知道是否有一种奇特的方法可以绕过编写所有这些代码 我已经使用了ViewModelBase实现的类INotifyPropertyChanged但这并不能解决必须编写所有访问器代码等的问题 也
  • python 中的大 O 表示法

    有谁知道有什么学习大符号的好资源吗 特别是学习如何遍历一些代码并能够看到它会是 O N 2 或 O logN 最好能告诉我为什么这样的代码等于 O N log N def complex numbers N len numbers resu
  • jQuery:在 3 个类之间切换(最初)

    我在这里看过几篇关于 SO 的帖子 但它们在功能和结构上过于具体 而我正在寻找的是更通用的东西 我或任何人都可以在任何地方使用 我所需要的只是有一个按钮 单击该按钮可以在之间循环3类 但如果出现必须循环 4 个 5 个或更多类的情况 则可以
  • 有什么办法可以查看标准输入缓冲区吗?

    我们知道stdin默认情况下是缓冲输入 证明这一点的证据是使用任何 留下数据 的机制stdin 例如scanf int main char c 10 0 scanf 9s c printf s and left is d n c getch
  • CreateProcess 执行 Windows 命令

    我正在尝试使用 CreateProcess 函数执行 dos 命令 LPWSTR cmd LPWSTR QString C windows system32 cmd exe subst DLetter mountPath utf16 STA
  • 如何在 R 中解决简单的优化问题

    我试图使用 R 中的 optim 函数来解决一个简单的问题 但我在如何实现它方面面临一些问题 e tot obs sum Var1 sum Var2 sum Var3 sum Var4 output Var1 Var2 Var3 Var4
  • 如何查看 git repo 的接收历史记录?

    我们有一个 中央 存储库 用于部署到我们的开发服务器 我知道git log将向我显示提交及其提交的日期 时间 但我想查看提交何时被推送到存储库 由存储库接收 有办法做到这一点吗 Git s reflogs https git scm com
  • IOS视图变换修改框架?

    我有一个视图 在其中我正在绘制矩形中进行一些特定的绘图 这些绘图是动态的 并且基于视图的宽度和高度 然后 包含它的视图对其应用旋转变换 然而 这种转换似乎调整了我的视图框架的值 这会影响我在drawRect中的绘图 NSLog 之前 f f
  • Windows XP、Vista 和 7 上安装了哪个版本的 .NET Framework?

    我有一个使用 NET Framework 3 5 的应用程序 我正在为一所大学构建这个应用程序来帮助学生学习 大多数学生通常使用Windows XP SP2 Windows Vista或Windows 7 对不起Mac用户 Mac版本将在大
  • 从代码更新 LinearDoubleKeyFrame KeyTime 值

    我有一些像这样的xaml
  • 集群中的用户(会话)计数

    有没有一种好方法可以获取集群中运行的 Java Web 应用程序的登录用户数 我写了一个简单的HttpSessionListener具有静态字段 但我认为这在集群中不起作用 我可以看到有一个 Spring Security 解决方案 但我在
  • 等待完成流的读取请求

    我在用着pngjs https github com niegowski node pngjs读取和写入一些 PNG 我定期收到此错误 Error There are some read requests waiting on finish
  • 节点号 X (RESHAPE) 准备失败。使用 tflite v2.2 调整张量大小

    这是重现错误的简单代码 import os os environ CUDA VISIBLE DEVICES 1 import numpy as np from keras models import Sequential from kera
  • android中JNI调用的命名约定是什么

    例如 在android Java代码中 它调用一个native方法 private native final String native getParameters 我应该在哪里 如何 grep C 方法在哪里定义native getPar
  • 使用子位置在 XSLT 中创建网格

    我正在尝试创建一个如下指定的网格