xslt - 在 XSLT 中循环 - <xsl :for-each

标签 xslt foreach navigation umbraco

我需要在 XSLT 中呈现以下格式。我有一个 <xsl:for-each包含 5 个元素(Text1、Text2 ... Text5)的循环,并且需要在每三个元素后包装一个 ul 标记。有什么建议吗?

<ul>
    <li>Text1</li>
    <li>Text2</li>
    <li>Text3</li>
</uL>
<ul>
    <li>Text4</li>
    <li>Text5</li>
</uL>

最佳答案

好问题,+1。

这个转换:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="thing" mode="inGrpoup">
  <li><xsl:value-of select="."/></li>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

应用于以下 XML 文档时:

<things>
    <thing>1</thing>
    <thing>2</thing>
    <thing>3</thing>
    <thing>4</thing>
    <thing>5</thing>
    <thing>6</thing>
    <thing>7</thing>
    <thing>8</thing>
</things>

产生想要的、正确的结果(连续三个一组的东西):

<ul>
   <li>1</li>
   <li>2</li>
   <li>3</li>
</ul>
<ul>
   <li>4</li>
   <li>5</li>
   <li>6</li>
</ul>
<ul>
   <li>7</li>
   <li>8</li>
</ul>

解释:

  1. 模板模式匹配一组三个 thing 元素中的第一个 thing

  2. 使用模式处理一组thing元素(与处理初始thing的方式不同) , 一旦确定。

关于xslt - 在 XSLT 中循环 - <xsl :for-each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542979/

相关文章:

java - 计算 xsl :result-document in a given stylesheet 的所有出现次数

PHP - 在数组中返回数组的值

react-native - 无法解析模块 'react-native-screen'

xml - 将 XSL 应用于 XSD 的工具?

xml - XSL 输出所有内容,包括节点名称、属性、文本

xml - XSLT 注释标签不输出内容?

PHP:在表单数据中操作多维数组?

JavaScript:Internet Explorer 不支持 forEach 方法

flutter - 单击 ListView 导航到 Flutter 中的另一个页面

html - 导航栏和固定 float 联系栏点击并保持打开,以及更改字体