Xml 生成特定ID';XSLT中的s

Xml 生成特定ID';XSLT中的s,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我好像有点被自动取款机卡住了。我正在尝试生成新的ID,但它没有按我希望的方式计算。 我有以下xml文件: <componentcontent> <explanation> <include filename="ha-c41-ep1.xml"/> <exercises> <include filename="ha-c41-ot1.xml"/>

我好像有点被自动取款机卡住了。我正在尝试生成新的ID,但它没有按我希望的方式计算。 我有以下xml文件:

<componentcontent>
        <explanation>
            <include filename="ha-c41-ep1.xml"/>
            <exercises>
                <include filename="ha-c41-ot1.xml"/>
                <include filename="ha-c41-ot2.xml"/>
            </exercises>
        </explanation>
        <explanation>
            <include filename="ha-c41-u1.xml"/>
            <exercises>
                <include filename="ha-c41-u11.xml"/>
                <include filename="ha-c41-ex-4.xml"/>
            </exercises>
        </explanation>
</componentcontent>

我希望解释文件(不是练习)具有以下id:filename=“1-u1”、filename=“1-u2”等

目前,我使用以下xslt:

<xsl:template match="componentcontent/explanation/include">
        <xsl:copy>
            <xsl:attribute name="local:_file" select="local:new-paragraph-filename(., 'u' )"/>
            <xsl:apply-templates select="node() | @*" />
            <xsl:number count="explanation/include" level="any"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="c:file[exercise[@type eq 'explanation']]">
        <xsl:variable name="include" as="element(include)?" select="key('includes', @name)"/>
        <xsl:if test="not($include)">
            <xsl:message terminate="yes">Geen include-element gevonden voor file met naam <xsl:value-of select="@name"/>.</xsl:message>
        </xsl:if>
        <xsl:copy>
            <xsl:attribute name="name" select="local:new-paragraph-filename(key('includes', @name), 'u' )"/>
            <xsl:apply-templates select="node() | @* except @name"/>
        </xsl:copy>
    </xsl:template>

Geen包含元素gevonden voor文件met naam。
这给了我以下输出:

<componentcontent>
        <explanation>
            <include filename="1-u1.xml">1</include>
            <exercises>
                <include filename="ha-c41-ot1.xml"/>
                <include filename="ha-c41-ot2.xml"/>
            </exercises>
        </explanation>
        <explanation>
            <include filename="1-u1.xml">2</include>
            <exercises>
                <include filename="ha-c41-u11.xml"/>
                <include filename="ha-c41-ex-4.xml"/>
            </exercises>
        </explanation>
</componentcontent

1.
2.
那么:

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

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="explanation/include/@filename">
    <xsl:attribute name="filename">
        <xsl:text>1-u</xsl:text>
        <xsl:number count="explanation/include" level="any"/>
        <xsl:text>.xml</xsl:text>
    </xsl:attribute>
</xsl:template>

</xsl:stylesheet>

1-u
.xml