html - 如果基于位置,则在 XSLT 中进行 HTML 输出

标签 html xml xslt

我正忙于一些 XSLT 的东西,想每 3 个项目开始一个新行。我想我可以做一个 if 语句并测试位置 mod 3,以确定我是表格中的第一个还是最后一个单元格。

以下 if 语句确实有效,但是 Copernica(我在其中使用 XSLT 的工具)不接受以下 XSLT。原因是 <tr>未在 if 语句中关闭。

我正在寻找一种方法来处理在 3 个项目之后分成几行的产品 Feed。

<xsl:if test="position() mod 3 = 1">
<tr>
</xsl:if>

最佳答案

我假设您会使用另一个 <xsl:if/>稍后在您的代码中关闭 <tr/> .不幸的是,虽然这在另一种编程语言中有效,但在 xslt 中却无效。

XSLT 不是一种过程性或命令式语言,因此不要将其作为一种语言使用。相反,您可以这样做:

<xsl:template match="element[position() mod 3 = 1]">
  <tr>
   <xsl:apply-templates mode="single" select=".|following-sibling::element[not(position() > 2)]"
   />
  </tr>
 </xsl:template>

 <xsl:template match="element" mode="single">
  <td>
    <!--your stuff between rows here-->
  </td>
 </xsl:template>

 <xsl:template match="element[not(position() mod 3 = 1)]"/>

所以这基本上每三行创建一个 tr,另外调用另一个模板来处理这些行之间的元素。 "element"应该是你要处理的元素。

关于html - 如果基于位置,则在 XSLT 中进行 HTML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087129/

相关文章:

xslt - XPath 1.0,将十六进制属性解释为数字

javascript - 格式化信用卡输入 JS 或 jQuery

xml - 是否有支持泛型的 Delphi 对象序列化库?

xml - xs :redefine and xs:override in XML schema 1. 1 之间的差异

javascript - 使用 Jquery 输出 XML 代码

xslt - 使用 XSL/XPath 匹配具有给定属性和子节点的任何名称的节点

XML 验证 - 如果那么

html - Flex - 使父级宽度为子级?

html - 如何在打印时隐藏类(class)

javascript - 检测CKEditor的焦点