简体   繁体   English

使用Muenchian分组xslt 1.0

[英]Using Muenchian grouping xslt 1.0

I know that there are a bunch of examples here on how to do Muenchian grouping, but I have been trying for quite some time and havent been able to get it. 我知道这里有很多关于如何进行Muenchian分组的示例,但是我已经尝试了很长时间了,但是还没有获得。

I am trying to group <spec> based on their <title> value using Muenchian grouping. 我正在尝试使用Muenchian分组将<spec>根据其<title>值进行分组。

I am using XSLT 1.0. 我正在使用XSLT 1.0。

XML: 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>

Wanted Result: 想要的结果:

<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>

Define a grouping key for the <title> . <title>定义一个分组键。

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

XSL to achieve the desired output 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>

Output 输出量

<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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM