合并同一文件中的xml部分

时间:2019-06-18 07:48:00

标签: xml xquery data-manipulation

我有一个xml文件,其中包含来自VistaDB数据库中各个表的数据,我希望使用该文件将数据传输到另一个VistaDB数据库中。

新数据库的模式略有不同,因为很明显,当时看来是一种明智的数据结构(基于继承),可以在多个主题领域进行进一步扩展,但这种做法并不可行。

结果是xml文件包含代表从这些表中收集的数据的部分,如下所示;

    <?xml version="1.0" encoding="utf-8"?>
<RootElement>
    <Contact>
        <Oid>eeeba14b-ee5e-4051-aaea-686a4d79820e</Oid>
        <ContactNumber>CON0000003</ContactNumber>
        <ContactType>3</ContactType>
        <DefaultCurrency>0</DefaultCurrency>
    </Contact>
    <ContactBase>
        <Oid>eeeba14b-ee5e-4051-aaea-686a4d79820e</Oid>
        <CurrentBalance>-2757.52</CurrentBalance>
        <FirstInvoiceDate>2016-01-01T00:00:00+00:00</FirstInvoiceDate>
        <LastInvoiceDate>2019-04-18T15:48:51.7242817+01:00</LastInvoiceDate>
    </ContactBase>
    <CommonBase>
        <Oid>eeeba14b-ee5e-4051-aaea-686a4d79820e</Oid>
        <IsActive>true</IsActive>
        <ContactBusinessName>Fred Flintstone</ContactBusinessName>
    </CommonBase>
</RootElement>

有没有一种简单的方法,也许可以使用一个我不太熟悉的XQuery之类的方法,使用一个文件中的公共共享Oid元素将这些独立的部分有效地合并为一个部分,或者会更容易只需将它们分离成新鲜的xml文件,然后合并它们,这是我熟悉并且可以做到的做法?

1 个答案:

答案 0 :(得分:1)

以下是在XQuery 3.1中使用group by的示例:

<RootElement>
{
    for $contact in RootElement/*
    group by $oid := $contact/Oid
    return
        <Contact>
        {
            head($contact)/Oid,
            $contact/(* except Oid)
        }
        </Contact>
}    
</RootElement>

https://xqueryfiddle.liberty-development.net/bFukv8r