xslt - 标记的 XSL 分组和包装
问题描述
在一个 xsl 转换方面需要一些帮助。我得到了一个具有以下格式的 XML
<p class="list">
<a href="../link-1.mp4">First Vid </a>
</p>
<p class="indent">test</p>
<notes><p>TEST ME NOTE</p></notes>
<p class="list">
<a href="../link-2.mp4">Second Vid </a>
</p>
这需要转换为类似
<ul>
<li class="list">
<p>
<a href="../link-1.mp4">First Vid </a>
</p>
<p class="indent">test</p>
<notes>
<p>TEST ME NOTE</p>
</notes>
</li>
<li class="list">
<a href="../link-2.mp4">Second Vid </a>
</li>
</ul>
我所做的是
<xsl:template match="p">
<li class="list">
<p>
<xsl:apply-templates/>
</p>
</li>
</xsl:template>
但这为所有 p 元素创建了 li 并且我丢失了 notes 标签。如何将类列表之间的这些节点包装到第一个 li?
解决方案
您可以使用 group-starting-with,例如:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<output>
<ul>
<xsl:for-each-group select="input/*" group-starting-with="p[@class='list']">
<li class="list">
<xsl:copy-of select="current-group()"/>
</li>
</xsl:for-each-group>
</ul>
</output>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- javascript - 在 IIFE 中使用 React Hooks 打破了 hooks 规则
- javascript - 从 Javascript fetch 中获取数据并将其显示在另一个函数中
- java - 如何让我的 javafx 代码计算我点击图像的次数?
- sql - 我如何在 oracle 中按 15 分钟间隔分组?
- c# - 如何从 WPF 应用程序在 Revit API 中引发外部事件?
- gitlab - Webhook 中的 Git 实验室集内容类型
- javascript - 将变量值分配给内部 html Spring MVC 标记值
- json - 输入'列表
' 不是类型 'List 的子类型 ' - variables - Haskell:用变量名替换字符
- json - 有没有办法在整个日志条目中搜索文本