如果存在匹配的子元素,则对XML子节点进行分组

时间:2019-02-21 13:58:40

标签: xml xslt xslt-1.0 transformation xslt-grouping

我有一个XML,其中包含有关多个记录的信息。

我希望根据匹配的子节点对子元素进行分组。

我需要执行以下操作的XSLT脚本

  

如果'MainId',我想将所有'info'标签分组为一个'body'   对于多个'body'元素是相同的。我需要这个分组   不论'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>

这是包含我的输入XML的XSLT:http://xsltfiddle.liberty-development.net/pPzifp9

0 个答案:

没有答案