如何将xml翻转过来?

时间:2015-10-29 00:55:41

标签: c# xml

我有一个庞大而复杂的对象树(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

有谁知道,我怎么能达到目标?

希望,我很清楚,这不是重新发布:)

1 个答案:

答案 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)"/>