Xslt 2.0 如何在XSLT中实现嵌套列表?

Xslt 2.0 如何在XSLT中实现嵌套列表?,xslt-2.0,Xslt 2.0,我想为每个元素添加标记,但当它是一个嵌套列表时有一种特殊情况。如果存在后代标记,则必须在该标记之前关闭此添加。虽然发生了,但我无法删除测试标记部分重复 请帮忙 输入: <a> <ol> <li> <s>test tag</s><br/> <ol> <li>list item1</li>

我想为每个
  • 元素添加
    标记,但当它是一个嵌套列表时有一种特殊情况。如果存在后代
    标记,则必须在该
    标记之前关闭此添加
    。虽然发生了,但我无法删除
    测试标记
    部分重复

    请帮忙

    输入:

    <a>
        <ol>
            <li>
                <s>test tag</s><br/>
                <ol>
                    <li>list item1</li>
                    <li>list item2</li>
                    <li>list item3</li>
                </ol>
            </li>
        </ol>
    </a>
    
    
    
  • 测试标签
  • 清单项目1
  • 清单项目2
  • 清单项目3
  • 预期产出:

    <a>
        <ol>
            <li>
                <p><s>test tag</s><br/></p>
                <ol>
    
                        <p><li>list item1</li></p>
                        <p><li>list item1</li></p>
                        <p><li>list item1</li></p>
    
                </ol>
            </li>
        </ol>
    </a>
    
    
    
  • 测试标签

  • 列出项目1
  • 列出项目1
  • 列出项目1
  • XSLT代码:

    <xsl:template match="ol">
        <ol>
            <xsl:apply-templates/>
        </ol>
    </xsl:template>
    
    <xsl:template match="li[not(descendant::ol)]">
        <li>
            <p>
                <xsl:apply-templates/>
            </p>
        </li>
    </xsl:template>
    
    <xsl:template match="li[descendant::ol]">
        <li>
            <p>
                <xsl:apply-templates select="node()[parent::li][following-sibling::ol]"/>
            </p>
        </li>
        <xsl:apply-templates select=""/>
    </xsl:template>
    
    <xsl:template match="node()[parent::li][following-sibling::ol]"/>
    
    
    

  • 如果没有子体
    ol
    ,则所需的输出在每个li外都有一个p元素,而样式表在每个ol内都有一个p元素。我不知道你到底想要哪个,但我想你知道如何修复它


    如果存在子体
    ol
    ,您只给出了一个可能的示例来说明您想要的内容,而一个示例并不构成规范。但是,对于该示例,以下方法可行:

    <xsl:template match="li[ol]">
        <li>
            <p>
                <xsl:apply-templates select="node()[not(self::ol)]"/>
            </p>
            <xsl:apply-templates select="ol"/>
        </li>
    </xsl:template>
    
    
    

  • 如果这不能解决一般情况下的问题,那是因为您没有说明一般情况下需要什么。

    您的预期输出具有“ol”作为“ol”的子级。你为什么要这样做?每个
  • 标签都应该在标签内。但是如果任何
  • 有Decentant标签,
  • 标签应该在Decentant标签之前关闭。我想这对你来说是很清楚的@MichaelKay。谢谢。我的评论不再相关,因为我发表评论后,你已经改变了问题。但您似乎仍在试图生成无效的HTML:作为
    ol
    的子级,您所需的输出现在具有
    p
    。除非您解释为什么要生成无效的HTML,否则我不会帮助您生成无效的HTML。@MichaelKay这不是一个实际的HTML页面。这是一个xml页面。唯一的概念是列表。因此我使用
  • 和作为输入xml文件。所以我认为在这里提供帮助不是问题。谢谢