【问题标题】:XSL grouping and wrapping of tags标记的 XSL 分组和包装
【发布时间】:2021-05-18 10:31:59
【问题描述】:

在一个 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?

【问题讨论】:

标签: xslt xslt-2.0 xslt-grouping


【解决方案1】:

您可以使用 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>

在这里查看它的工作原理:https://xsltfiddle.liberty-development.net/aiyneL

【讨论】:

  • 工作得非常好。非常感谢
  • @JinoJohnDevasia 不客气。如果您的问题得到解答,请将答案标记为已接受。
猜你喜欢
  • 2017-06-12
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多