У меня есть несколько типов сообщений xml, которые мне нужно «сжать», сгруппировав несколько узлов под одним и тем же родителем (один и тот же родитель означает, что они имеют одно и то же имя узла, и каждый объявленный атрибут также равен). Например:
<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, Start и End, поэтому мне нужно создать следующий вывод с помощью 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-сообщения, которое мне нужно отправить.