使用 xsl:apply 模板在特定结构中循环

Looping in a specific structure with xsl:apply-templates

我正在尝试使用 xsl:apply-模板在以下结构中创建列表元素。是否可以在不使用 xsl:for-each 的情况下实现以下输出? 我能够使用 xsl:for-each 实现以下结构,但想知道是否可以使用 xsl:apply-templates.

下面是我的XML

<Properties>
    <Root>
        <group-container>
            <group-title>
                <title-name>Packs1</title-name>
                <title-sub-links>
                    <subtitle-name>sub1</subtitle-name>
                </title-sub-links>
                <title-sub-links>
                    <subtitle-name>sub2</subtitle-name>
                </title-sub-links>
            </group-title>
            <group-title>
                <title-name>Packs2</title-name>
                <title-sub-links>
                    <subtitle-name>abc</subtitle-name>
                </title-sub-links>
                <title-sub-links>
                    <subtitle-name>xyz</subtitle-name>
                </title-sub-links>
            </group-title>
        </group-container>
        <group-title>
            <title-name>link title 1</title-name>
        </group-title>
        <group-title>
            <title-name>link xyz</title-name>
        </group-title>
    </Root>
</Properties>

XSL

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="/">
        <div class="col-9 tab">
            <ul>
                <xsl:apply-templates select = "/Properties/Root/group-container/group-title"/>
                <xsl:apply-templates select = "/Properties/Root/group-container/group-title/title-sub-links"/>
            </ul>
        </div>

    </xsl:template>
    <xsl:template match = "group-title">
        <li>
            <xsl:value-of select="title-name"/>
        </li>
    </xsl:template>
    <xsl:template match = "title-sub-links">
        <li>
            <xsl:value-of select="subtitle-name"/>
        </li>
    </xsl:template>
</xsl:stylesheet>

收到输出

<div class="col-9 tab">
    <ul>
        <li>Packs1</li>
        <li>Packs2</li>
        <li>sub1</li>
        <li>sub2</li>
        <li>abc</li>
        <li>xyz</li>
    </ul>
</div>

预期产出

<div class="col-9 tab">
    <ul>
        <li>Packs1</li>
        <li>sub1</li>
        <li>sub2</li>
    </ul>
    <ul>
        <li>Packs2</li>
        <li>abc</li>
        <li>xyz</li>
    </ul>
</div>

我认为(!)你想做的事情:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:template match="/">
        <div class="col-9 tab">
            <xsl:apply-templates select = "/Properties/Root/group-container/group-title"/>
        </div>
    </xsl:template>

    <xsl:template match = "group-title">
        <ul>
            <li>
                <xsl:value-of select="title-name"/>
            </li>
            <xsl:apply-templates select = "title-sub-links"/>
         </ul>
    </xsl:template>

    <xsl:template match = "title-sub-links">
        <li>
            <xsl:value-of select="subtitle-name"/>
        </li>
    </xsl:template>

</xsl:stylesheet>