Мне нужно выполнить преобразование для документа XML, и оно должно быть сгруппировано по различным критериям. Я знаю группировку мюнхенов, но я не уверен, что это правильный метод для такого типа группирования. У меня есть следующий документ:
<ns1:Items xmlns:ns1="http://schemas.company.com/items/1.0" xmlns:ns0="http://schemas.company.com/item/1.0">
<ns1:Item>
<ns0:Id>1</ns0:Id>
<ns0:Date>02-09-2019</ns0:Date>
<ns0:From>0001</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>false</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>Y</ns0:Type>
<ns0:ItemNumber>10111184</ns0:ItemNumber>
<ns0:Description>abc</ns0:Description>
<ns0:Quantity>1</ns0:Quantity>
<ns0:Price>499</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
<ns1:Item>
<ns0:Id>2</ns0:Id>
<ns0:Date>02-09-2019</ns0:Date>
<ns0:From>0001</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>false</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>Y</ns0:Type>
<ns0:ItemNumber>10111183</ns0:ItemNumber>
<ns0:Description>def</ns0:Description>
<ns0:Quantity>1</ns0:Quantity>
<ns0:Price>549</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
<ns1:Item>
<ns0:Id>7</ns0:Id>
<ns0:Date>01-09-2019</ns0:Date>
<ns0:From>0001</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>false</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>N</ns0:Type>
<ns0:ItemNumber>81012521</ns0:ItemNumber>
<ns0:Description>jkl</ns0:Description>
<ns0:Quantity>3</ns0:Quantity>
<ns0:Price>159</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
<ns1:Item>
<ns0:Id>3</ns0:Id>
<ns0:Date>03-09-2019</ns0:Date>
<ns0:From>4567</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>false</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>Y</ns0:Type>
<ns0:ItemNumber>10101951</ns0:ItemNumber>
<ns0:Description>ghi</ns0:Description>
<ns0:Quantity>1</ns0:Quantity>
<ns0:Price>999</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
<ns1:Item>
<ns0:Id>10</ns0:Id>
<ns0:Date>03-09-2019</ns0:Date>
<ns0:From>4567</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>false</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>Y</ns0:Type>
<ns0:ItemNumber>10101952</ns0:ItemNumber>
<ns0:Description>ghighj</ns0:Description>
<ns0:Quantity>1</ns0:Quantity>
<ns0:Price>999</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
<ns1:Item>
<ns0:Id>22</ns0:Id>
<ns0:Date>03-09-2019</ns0:Date>
<ns0:From>4567</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>true</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>Y</ns0:Type>
<ns0:ItemNumber>10101960</ns0:ItemNumber>
<ns0:Description>ugygiuy</ns0:Description>
<ns0:Quantity>1</ns0:Quantity>
<ns0:Price>78</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
<ns1:Item>
<ns0:Id>12</ns0:Id>
<ns0:Date>03-09-2019</ns0:Date>
<ns0:From>4567</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>false</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>Y</ns0:Type>
<ns0:ItemNumber>10101955</ns0:ItemNumber>
<ns0:Description>guyighj</ns0:Description>
<ns0:Quantity>1</ns0:Quantity>
<ns0:Price>999</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
<ns1:Item>
<ns0:Id>4</ns0:Id>
<ns0:Date>02-09-2019</ns0:Date>
<ns0:From>0001</ns0:From>
<ns0:To>9052</ns0:To>
<ns0:IsAct>false</ns0:IsAct>
<ns0:ItemDetail>
<ns0:Type>N</ns0:Type>
<ns0:ItemNumber>81012522</ns0:ItemNumber>
<ns0:Description>xyz</ns0:Description>
<ns0:Quantity>3</ns0:Quantity>
<ns0:Price>159</ns0:Price>
</ns0:ItemDetail>
</ns1:Item>
</ns1:Deliveries>
и мне нужно преобразовать его в следующий документ. Сначала элементы должны быть сгруппированы по ItemDetail/Type
. Предметы с ItemDetail/Type
из Y
должны быть подгруппированы по IsAct
. И Предметы с IsAct
из false
должны быть подгруппированы в Предметы с From
из 0001
, а те, которые не 0001
. Наконец, подгруппы должны быть сгруппированы по Date
.
<ns0:ItemSpecification xmlns:ns0="http://schemas.company.com/itemspecification/1.0">
<Sections>
<Section>
<!-- item type Y and from 0001 and isAct false -->
<Name>TypeA1</Name>
<Date>02-09-2019</Date>
<Items>
<Item>
<Id>1</Id>
<Article>
<Type>Y</Type>
<ItemNumber>10111184</ItemNumber>
<Description>abc</Description>
<Quantity>1</Quantity>
<Price>499</Price>
</Article>
</Item>
<Item>
<Id>2</Id>
<Article>
<Type>Y</Type>
<ItemNumber>10111183</ItemNumber>
<Description>def</Description>
<Quantity>1</Quantity>
<Price>549</Price>
</Article>
</Item>
</Items>
</Section>
<Section>
<!-- item type Y and from 0001 and isAct false -->
<Name>TypeA1</Name>
<Date>03-09-2019</Date>
<Items>
<Item>
<Id>3</Id>
<Article>
<Type>Y</Type>
<ItemNumber>10101951</ItemNumber>
<Description>ghi</Description>
<Quantity>1</Quantity>
<Price>999</Price>
</Article>
</Item>
</Items>
</Section>
<Section>
<!-- item type Y and not from 0001 and isAct false -->
<Name>TypeA2</Name>
<Date>03-09-2019</Date>
<Items>
<Item>
<Id>10</Id>
<Article>
<Type>Y</Type>
<ItemNumber>10101952</ItemNumber>
<Description>ghighj</Description>
<Quantity>1</Quantity>
<Price>999</Price>
</Article>
</Item>
<Item>
<Id>12</Id>
<Article>
<Type>Y</Type>
<ItemNumber>10101955</ItemNumber>
<Description>guyighj</Description>
<Quantity>1</Quantity>
<Price>999</Price>
</Article>
</Item>
</Items>
</Section>
<Section>
<!-- item type Y and isAct true -->
<Name>TypeA3</Name>
<Date>03-09-2019</Date>
<Items>
<Item>
<Id>22</Id>
<Article>
<Type>Y</Type>
<ItemNumber>10101960</ItemNumber>
<Description>ugygiuy</Description>
<Quantity>1</Quantity>
<Price>78</Price>
</Article>
</Item>
</Items>
</Section>
<Section>
<!-- item type N -->
<Name>TypeB</Name>
<Date>01-09-2019</Date>
<Items>
<Item>
<Id>7</Id>
<Article>
<Type>N</Type>
<ItemNumber>81012521</ItemNumber>
<Description>jkl</Description>
<Quantity>3</Quantity>
<Price>159</Price>
</Article>
</Item>
</Items>
</Section>
<Section>
<!-- item type N -->
<Name>TypeB</Name>
<Date>02-09-2019</Date>
<Items>
<Item>
<Id>4</Id>
<Article>
<Type>N</Type>
<ItemNumber>81012522</ItemNumber>
<Description>xyz</Description>
<Quantity>3</Quantity>
<Price>159</Price>
</Article>
</Item>
</Items>
</Section>
</Sections>
</ns0:ItemSpecification>