Объединение разделов XML внутри одного файла - PullRequest
0 голосов
/ 18 июня 2019

У меня есть 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 Ответ

1 голос
/ 18 июня 2019

Вот пример использования group by в XQuery 3.1:

<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

...