Группировать дочерние узлы XML, если есть соответствующий дочерний элемент - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть XML, содержащий информацию о нескольких записях.

Я хочу, чтобы дочерние элементы были сгруппированы на основе соответствующего дочернего узла.

Мне нужны сценарии XSLT, которые выполняют следующие действия

Я хочу сгруппировать все теги 'info' в один 'body' , если 'MainId' одинаков для нескольких 'тело' элементов.Мне нужно, чтобы эта группировка выполнялась независимо от значений в других узлах внутри 'body' .

Входной XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns="12345">
<Main>
    <Header>
        <DateTime>2019-02-21- 6:36:43 PM</DateTime>
        <NbOfRecords>2</NbOfRecords>
    </Header>
    <Body>
        <Id>1000198</Id>
        <Info>
            <CustId>
                <Id>
                    <MainId>AB123</MainId>
                </Id>
            </CustId>
            <AddInfo>
                <info>
                    <Amt>
                        <ActAmt Ccy="Test">149500</ActAmt>
                    </Amt>
                </info>
                <info>
                    <Amt>
                        <NegAmt Ccy="Test">0</NegAmt>
                    </Amt>
                </info>
            </AddInfo>
        </Info>
    </Body>
    <Body>
        <Id>1000199</Id>
        <Info>
            <CustId>
                <Id>
                    <MainId>AB123</MainId>
                </Id>
            </CustId>
            <AddInfo>
                <info>
                    <Amt>
                        <ActAmt Ccy="Test">16000</ActAmt>
                    </Amt>
                </info>
                <info>
                    <Amt>
                        <NegAmt Ccy="Test">0</NegAmt>
                    </Amt>
                </info>
            </AddInfo>
        </Info>
    </Body>
    <Body>
        <Id>1000200</Id>
        <Info>
            <CustId>
                <Id>
                    <MainId>BC124</MainId>
                </Id>
            </CustId>
            <AddInfo>
                <info>
                    <Amt>
                        <ActAmt Ccy="GBP">16000</ActAmt>
                    </Amt>
                </info>
                <info>
                    <Amt>
                        <NegAmt Ccy="GBP">12000</NegAmt>
                    </Amt>
                </info>
            </AddInfo>
        </Info>
    </Body>
</Main>

Ожидаемый выходной XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns="12345">
<Main>
    <Header>
        <DateTime>2019-02-21- 6:36:43 PM</DateTime>
        <NbOfRecords>2</NbOfRecords>
    </Header>
    <Body>
        <Id>1000198</Id>
        <Info>
            <CustId>
                <Id>
                    <MainId>AB123</MainId>
                </Id>
            </CustId>
            <AddInfo>
                <info>
                    <Amt>
                        <ActAmt Ccy="Test">149500</ActAmt>
                    </Amt>
                </info>
                <info>
                    <Amt>
                        <NegAmt Ccy="Test">0</NegAmt>
                    </Amt>
                </info>
                <info>
                    <Amt>
                        <ActAmt Ccy="Test">16000</ActAmt>
                    </Amt>
                </info>
                <info>
                    <Amt>
                        <NegAmt Ccy="Test">0</NegAmt>
                    </Amt>
                </info>
            </AddInfo>
        </Info>
    </Body>
    <Body>
        <Id>1000200</Id>
        <Info>
            <CustId>
                <Id>
                    <MainId>BC124</MainId>
                </Id>
            </CustId>
            <AddInfo>
                <info>
                    <Amt>
                        <ActAmt Ccy="GBP">16000</ActAmt>
                    </Amt>
                </info>
                <info>
                    <Amt>
                        <NegAmt Ccy="GBP">12000</NegAmt>
                    </Amt>
                </info>
            </AddInfo>
        </Info>
    </Body>
</Main>

Вот XSLT, содержащий мой входной XML: http://xsltfiddle.liberty -development.сеть / pPzifp9

...