0

私は次のXSLを持っています。

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
        <xsl:template match="/">
            <xsl:element name="root">
                <xsl:apply-templates select="ModelDefinition/ContainerSpecNode"/>
            </xsl:element>
        </xsl:template>
        <xsl:template match="ContainerSpecNode">
            <xsl:element name="item">
                <xsl:attribute name="id"><xsl:value-of select="@specId"/></xsl:attribute>
                <xsl:attribute name="pathId"><xsl:value-of select="@pathId"/></xsl:attribute>
                <xsl:attribute name="specId"><xsl:value-of select="@specId"/></xsl:attribute>
                <xsl:attribute name="rel"><xsl:value-of select="@specType"/></xsl:attribute>
                <xsl:element name="content">
                    <xsl:element name="name">
                        <xsl:value-of select="shortName"/>
                        <xsl:if test="(@minimumCardinalityCount = '0') or (@maximumCardinalityCount != '1')"> [<xsl:value-of select="@minimumCardinalityCount"/>..<xsl:value-of select="@maximumCardinalityCount"/>]</xsl:if>
                    </xsl:element>
                </xsl:element>
                <xsl:apply-templates select="propertySpecs/PropertySpecNode">
                    <xsl:sort select="shortName"/>
                </xsl:apply-templates>
            </xsl:element>
        </xsl:template>
</xsl:stylesheet>

ここでは、"Tree_node_1" や "Tree_Node_2" などのように、各 containerSpecNode の Item 要素の ID 属性に増分の一意の番号を作成したいと考えています。ここでは、次のようにコードを変更しました。

. . . . . .
<xsl:element name="item">
<xsl:variable name="count">
            <xsl:number/>
            </xsl:variable>
            <xsl:attribute name="id"><xsl:value-of select="'Tree_Node_'"/><xsl:value-of select="$count+1"/></xsl:attribute>

カウント値をインクリメントしますが、すべての ContainerSpecNode に対してではありません。一部の ID の値が重複しています。

ContainerSpecNode ごとに作成したい。これどうやってするの。for-each ループを使用できますか? そしてどうやって?

4

1 に答える 1

2

あなたは正しい解決策に近づいています

置き換えるだけです:

<xsl:variable name="count">             
  <xsl:number/>             
</xsl:variable> 

:

<xsl:variable name="count" select=
     "count(preceding::ContainerSpecNode | ancestor::ContainerSpecNode) +1"/>             
于 2012-05-30T12:34:36.650 に答える