xsl在创建的xml树上选择distinct

时间:2013-02-25 14:35:32

标签: xml xslt xslt-2.0

我有以下xml树。

<columns>
    <column>
        <name>Version</name>
        <type>string</type>
        <multiquery useconnectionid="1" get="Version">SELECT ...</multiquery>
        <columns>
            <column>
                <name>Success</name>
                <type>number</type>
                <query useconnectionid="2" param="version">SELECT ...</query>
            </column>
            <column>
                <name>Failure</name>
                <type>number</type>
                <query useconnectionid="1" param="version">SELECT ...</query>
            </column>
        </columns>
    </column>
</columns>

以下xslt模板:

<xsl:template match="column" mode="findid">
    <xsl:param name="header" required="yes" />
    <xsl:param name="dbid" required="no" />
    <xsl:variable name="dbids">
        <xsl:if test="$dbid">
            <xsl:value-of select="$dbid" />
        </xsl:if>
        <xsl:for-each select="multiquery">
            <id><xsl:value-of select="@useconnectionid" /></id>
        </xsl:for-each>
        <xsl:for-each select="query">
            <id><xsl:value-of select="@useconnectionid" /></id>
        </xsl:for-each>
    </xsl:variable>

    <xsl:for-each select="distinct-values($dbids/id)">
        <xsl:value-of select="." />
    </xsl:for-each>

    <xsl:choose>
        <xsl:when test="columns/column">
            <xsl:apply-templates select="columns/column" mode="findid">
                <xsl:with-param name="header" select="$header" />
                <xsl:with-param name="dbid" select="$dbids" />
            </xsl:apply-templates>
        </xsl:when>
        <xsl:otherwise>

        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

由于某种原因,我无法让创建的id树选择distinct。它总是绘制121并且我只想要它绘制12.我不是一个唯一的id列表,我将在其他树中更改调用以写入信息。我已经尝试了一些与xslt 1一起使用的方法,但我认为这是一个问题,因为它不在原始的xml文件中,但我构建了一个新的树,我尝试排序不同。

任何帮助或暗示我可以尝试的将不胜感激。我现在用saxon解析器解析它。

// Andreas

编辑: 我想使用排序的id列表从标头创建连接。所以我为连接1创建了一个设置,为连接2创建了一个。我现在的问题是我创建连接1次,因为我无法选择不同的id:s。

1 个答案:

答案 0 :(得分:0)

对此感到抱歉。它按照我的方式工作,但递归使它看起来像小组一样不起作用。

所以问题在于递归使它看起来像打印了3次。