使用Muenchian分组xslt 1.0

时间:2017-10-16 15:39:31

标签: xml xslt xslt-1.0

我知道这里有很多关于如何进行Muenchian分组的例子,但是我已经尝试了很长时间而且还没能得到它。

我正在尝试使用Muenchian分组根据<spec>值对<title>进行分组。

我正在使用XSLT 1.0。

XML:

<product>
    <specifications>
        <spec>
            <title>A</title>
            <value>val1</value>
        </spec>
        <spec>
            <title>A</title>
            <value>val2</value>
        </spec>
        <spec>
            <title>B</title>
            <value>val3</value>
        </spec>
        <spec>
            <title>C</title>
            <value>val4</value>
        </spec>
        <spec>
            <title>C</title>
            <value>val5</value>
        </spec>
        <spec>
            <title>D</title>
            <value>val6</value>
        </spec>
    <specifications>
</product>

通缉结果:

<group>
    <title>A</title>
    <values>
        <value>val1</value>
        <value>val2</value>
    </values>
</group>
<group>
    <title>B</title>
    <values>
        <value>val3</value>
    </values>
</group>
<group>
    <title>C</title>
    <values>
        <value>val4</value>
        <value>val5</value>
    </values>
</group>
<group>
    <title>D</title>
    <values>
        <value>val6</value>
    </values>
</group>

1 个答案:

答案 0 :(得分:0)

<title>定义分组键。

<xsl:key name="kTitle" match="spec" use="title" />

XSL实现所需的输出

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

    <xsl:key name="kTitle" match="spec" use="title" />

    <xsl:template match="spec[generate-id() = generate-id(key('kTitle', title)[1])]">
        <group>
            <xsl:copy-of select="title" />
            <values>
                <xsl:copy-of select="key('kTitle', title)/value" />
            </values>
        </group>
    </xsl:template>

    <xsl:template match="spec" />
</xsl:stylesheet>

输出

<group>
    <title>A</title>
    <values>
        <value>val1</value>
        <value>val2</value>
    </values>
</group>
<group>
    <title>B</title>
    <values>
        <value>val3</value>
    </values>
</group>
<group>
    <title>C</title>
    <values>
        <value>val4</value>
        <value>val5</value>
    </values>
</group>
<group>
    <title>D</title>
    <values>
        <value>val6</value>
    </values>
</group>