我有多种类型的xml消息,我需要通过将多个节点分组到同一个父节点(同一个父节点共享相同的节点名称,并声明的每个属性也相同)来“压缩”。例如:xslt按属性分组
<TopLevel CodeTL="Something">
<Ratings>
<Rating CodeA="ABC" Start="1-1-2012" End="1-2-2012">
<RatingByNumber Code="X" Rating="10" Number="1">
<RatingByNumber Code="X" Rating="19" Number="2">
</Rating>
</Ratings>
</TopLevel>
<TopLevel CodeTL="Something">
<Ratings>
<Rating CodeA="ABC" Start="1-2-2012" End="1-3-2012">
<RatingByNumber Code="X" Rating="10" Number="1">
<RatingByNumber Code="X" Rating="19" Number="2">
</Rating>
</Ratings>
</TopLevel>
<TopLevel CodeTL="Something">
<Ratings>
<Rating CodeA="XYZ" Start="1-2-2012" End="1-3-2012">
<RatingByNumber Code="X" Rating="10" Number="1">
<RatingByNumber Code="X" Rating="19" Number="2">
</Rating>
</Ratings>
</TopLevel>
<TopLevel CodeTL="Something">
<Ratings>
<Rating CodeA="XYZ" Start="1-2-2012" End="1-3-2012">
<RatingByNumber Code="X" Rating="30" Number="3">
<RatingByNumber Code="X" Rating="39" Number="4">
</Rating>
</Ratings>
</TopLevel>
注意如何将它们共享相同的CodeTL属性和最后2共享相同的CODEa所,开始和结束属性,所以我需要的是使用XSLT
<TopLevel CodeTL="Something">
<Ratings>
<Rating CodeA="ABC" Start="1-1-2012" End="1-2-2012">
<RatingByNumber Code="X" Rating="10" Number="1">
<RatingByNumber Code="X" Rating="19" Number="2">
</Rating>
<Rating CodeA="ABC" Start="1-2-2012" End="1-3-2012">
<RatingByNumber Code="X" Rating="10" Number="1">
<RatingByNumber Code="X" Rating="19" Number="2">
</Rating>
<Rating CodeA="XYZ" Start="1-2-2012" End="1-3-2012">
<RatingByNumber Code="X" Rating="10" Number="1">
<RatingByNumber Code="X" Rating="19" Number="2">
<RatingByNumber Code="X" Rating="30" Number="3">
<RatingByNumber Code="X" Rating="39" Number="4">
</Rating>
</Ratings>
</TopLevel>
产生以下输出
这是更清洁,并根据使用它的应用程序,它可能节省处理时间和节省空间。
我遇到的问题是我有不同类型的xml消息具有不同的节点名称和属性(和属性数量),但它们都共享我在这里展示的相同结构。 这将是一个很好的通用方法来处理所有这些,但我会很感激XSLT转换我提供的示例,所以我可以为我需要发送的每个xml消息创建自定义代码。
这似乎真的是我想要的,除了我被1.0困住了。我会看看我能否做点什么。感谢您的详细解答。 – 2012-07-10 12:24:16
@EdFox:在XSLT 1.0中,使用了相同的想法,但使用两遍转换,第一遍创建每个元素的副本并添加包含签名的特殊新元素(或属性)。在第二遍中,我们对这个特殊元素/属性进行简单的Muenchian分组。 – 2012-07-10 12:28:59
你可以添加1.0版本到你的文章?对不起,我仍然有点被xslt所淹没,所以我不确信我可以将你的解释翻译成实际的代码。 – 2012-07-10 13:11:09