Выполните несколько разных группировок, используя xslt 1.0 для одного документа - PullRequest
0 голосов
/ 19 января 2020

Мне нужно выполнить преобразование для документа 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>
...