XSLT:将具有重复ID的平面列表转换为层次结构

时间:2017-01-24 23:27:32

标签: xml xslt

我无法想出一个XSLT来识别某个元素的重复项,并将其组合/压缩以避免重复。

我有这样的XML:

<items>
    <item>
        <ID>1</ID>
        <RelationalID>55</RelationalID>
    </item>
    <item>
        <ID>1</ID>
        <RelationalID>56</RelationalID>
    </item>
    <item>
        <ID>1</ID>
        <RelationalID>57</RelationalID>
    </item>
    <item>
        <ID>2</ID>
        <RelationalID>55</RelationalID>
    </item>
</items>

希望它看起来像:

<items>
    <item>
        <ID>1</ID>
        <RelationalID>55</RelationalID>
        <RelationalID>56</RelationalID>
        <RelationalID>57</RelationalID>
    </item>
    <item>
        <ID>2</ID>
        <RelationalID>55</RelationalID>
    </item>
</items>

1 个答案:

答案 0 :(得分:1)

这是一个标准的分组问题。如果您能够使用XSLT 2.0,请使用

<xsl:for-each-group select="item" group-by="ID">
  <xsl:copy-of select="current-group()[1]/ID, current-group()/RelationalID"/>
</xsl:for-each-group>

如果你坚持使用XSLT 1.0,请阅读Muenchian分组。