我有一个庞大而复杂的对象树(c#中的实体,我将其序列化)。
例如......一个大家谱(孩子的父母)。一个巨大的家庭的家谱与每个人的很多属性。大多数“目的地”都有一些习惯,比如滑冰,电子游戏,钓鱼,跳舞(大多数孩子只有一个爱好,有些有几个爱好,有些有非爱好)。像这样:
src.files && src.files[0]
像这样的东西,但有点复杂,而且要大得多。
我需要做的是将这棵树颠倒过来制作图表并运行一些分析。根节点需要是<family>
<parent>
<name>Alex</name>
<age>72</age>
<sex>male</sex>
<children>
<kid>
<name>Loren</name>
<age>male</age>
<sex>45</sex>
<children>
<kid>
<name>Mile</name>
<age>14</age>
<sex>male</sex>
<hobbies>
<hobby>
<name>Bike</name>
</hobby>
<hobby>
<name>Video games</name>
</hobby>
<hobby>
<name>Reading</name>
</hobby>
</hobbies>
</kid>
</children>
</kid>
</children>
</parent>
<parent>
<name>Nataly</name>
<age>67</age>
<sex>female</sex>
<children>
<kid>
<name>Jordan</name>
<age>35</age>
<sex>male</sex>
<hobbies>
<hobby>
<name>Skate</name>
</hobby>
<hobby>
<name>Read</name>
</hobby>
</hobbies>
</kid>
</children>
</parent>
</family>
,分支的末尾必须是“父”。像这样(未完成):
hobbies
有谁知道,我怎么能达到目标?
希望,我很清楚,这不是重新发布:)
答案 0 :(得分:3)
分层反转在XSLT世界中已知为&#34;分组&#34;,并且可以使用XSLT 2.0中的xsl:for-each-group构造非常方便地完成。如果没有完成示例中的所有逻辑,它将是这样的:
<xsl:template match="/">
<hobbies>
<xsl:for-each-group select="//hobby" group-by="name">
<hobby>
<name><xsl:value-of select="current-grouping-key()"/></name>
<users>
<xsl:for-each select="current-group()">
<user>
<xsl:copy-of select="ancestor::kid/(name, age, sex)"/>
等