powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как работать с xmltable если в xml русские namespace
6 сообщений из 6, страница 1 из 1
Как работать с xmltable если в xml русские namespace
    #39783350
dJabber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Есть много xml документов, залитых в табличку в поле clob.
Формат документа приведен ниже.
Стоит задача вытащить данные из всех таких документов в виде таблицы.
Но на русские неймспейсы DB2 ругается, ибо считает, что в неймспейсах не может быть русских символов.
Пока обошелся костылем - выкусываю replace'ом префиксы и тем же replace'ом выкусываю дефолтный namespace (код приведен ниже).

Вопрос: а есть ли более приличное решение данной задачи?

Решение с костылями:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
select replace(replace(snils,'-',''),' ','') snils,family,name,otchestvo,region,npf,pfrdept,datezayav
    from (
        select sa.id,xmlparse(document cast (
             replace(
               replace(
                  replace(
                     replace(
                       cast(data as varchar(32000)),'УТ2:','' --выкусываем префиксы
                       ),'Вх_ВЗЛ2:','' --выкусываем префиксы
                   ),'Инвест2:','' --выкусываем префиксы
               ),'xmlns="http://пф.рф/ВЗЛ/ДНПФД/2018-09-14"','' --выкусываем дефолтный namespace
             ) as clob(32k))) d 
        from lk.SMEV_DOCS_from_pfr sd
        join lk.SMEV_DOCS_from_pfr_attachments sa on sa.doc_id=sd.id
        where sd.doc_type='ДНПФД'
    ) x, xmltable(
      '$dd/ЭДПФР' 
      PASSING x.d as "dd"
      columns
      snils varchar(30) path 'ДНПФД/Анкета/СНИЛС',
      family varchar(100) path 'ДНПФД/Анкета/ФИО/Фамилия',
      name varchar(100) path 'ДНПФД/Анкета/ФИО/Имя',
      otchestvo varchar(100) path 'ДНПФД/Анкета/ФИО/Имя',
      region varchar(100) path 'ДНПФД/ПочтовыйАдрес/Регион/Название',
      npf varchar(1000) path 'ДНПФД/НовыйСтраховщик/Наименование',
      pfrdept varchar(1000) path 'СлужебнаяИнформация/ТОПФР/Наименование',
      datezayav varchar(1000) path 'СлужебнаяИнформация/ДатаПодачи'
      ) y



Пример XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
<?xml version="1.0" encoding="UTF-8"?>
<ЭДПФР xmlns="http://пф.рф/ВЗЛ/ДНПФД/2018-09-14" xmlns:date="http://exslt.org/dates-and-times" 
xmlns:АФ4="http://пф.рф/АФ/2017-08-21" xmlns:Инвест2="http://пф.рф/ВЗЛ/типы/Входящие/Инвест/2018-09-14" xmlns:Вх_ВЗЛ2="http://пф.рф/ВЗЛ/типы/Входящие/2018-09-14" 
xmlns:УТ2="http://пф.рф/УТ/2017-08-21" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pgufg="http://idecs.atc.ru/pgufg/ws/fgapc/">
<ДНПФД>
        <Инвест2:Анкета>
            <Инвест2:ФИО>
                <УТ2:Фамилия>PPPP</УТ2:Фамилия>
                <УТ2:Имя>JJJJ</УТ2:Имя>
                <УТ2:Отчество>ЫЫЫЫ</УТ2:Отчество>
            </Инвест2:ФИО>
            <УТ2:Пол>Ж</УТ2:Пол>
            <УТ2:ДатаРождения>1969-04-29</УТ2:ДатаРождения>
            <УТ2:СНИЛС>000-000-000 00</УТ2:СНИЛС>
        </Инвест2:Анкета>
        <Инвест2:ПочтовыйАдрес>
            <УТ2:Индекс>000000</УТ2:Индекс>
            <УТ2:Регион>
            <УТ2:Название>Московская</УТ2:Название>
            <УТ2:Сокращение>обл</УТ2:Сокращение>
            </УТ2:Регион>
            <УТ2:Город>
            <УТ2:Название>Кострома</УТ2:Название>
            <УТ2:Сокращение>г</УТ2:Сокращение>
            </УТ2:Город>
            <УТ2:Улица>
            <УТ2:Название>Астраханская</УТ2:Название>
            <УТ2:Сокращение>ул</УТ2:Сокращение>
            </УТ2:Улица>
            <УТ2:Дом>46</УТ2:Дом>
            <УТ2:Квартира>1</УТ2:Квартира>
        </Инвест2:ПочтовыйАдрес>
        <УТ2:АдресЭлПочты>a@b.ru<;/УТ2:АдресЭлПочты>
        <УТ2:Телефон>(999)999-99-99</УТ2:Телефон>
        <ТекущийСтраховщик>
            <Инвест2:Тип>НПФ</Инвест2:Тип>
            <УТ2:Наименование>РОМАШКА</УТ2:Наименование>
        </ТекущийСтраховщик>
        <НовыйСтраховщик>
            <Инвест2:Тип>НПФ</Инвест2:Тип>
            <УТ2:Наименование>ВАСИЛЕК</УТ2:Наименование>
        </НовыйСтраховщик>
        <РеквизитыДоговора>
            <УТ2:Дата>2019-02-25</УТ2:Дата>
            <УТ2:Номер>000-000-000 00</УТ2:Номер>
        </РеквизитыДоговора>
        <Извещен>1</Извещен>
    </ДНПФД>
    <СлужебнаяИнформация>
        <АФ4:GUID>f21863ac-f6a0-4c21-a110-bcdfb58d21a4</АФ4:GUID>
        <АФ4:ДатаВремя>2019-03-04T17:58:51+03:00</АФ4:ДатаВремя>
            <Вх_ВЗЛ2:ТОПФР>
                <УТ2:Код>087001</УТ2:Код>
                <УТ2:Наименование>ГУ-ГУПФР № 1 по г. Москве и МО</УТ2:Наименование>
            </Вх_ВЗЛ2:ТОПФР>
        <Вх_ВЗЛ2:ИсточникДанных>ЗЛ</Вх_ВЗЛ2:ИсточникДанных>
        <Вх_ВЗЛ2:СпособПередачи>ЕПГУ</Вх_ВЗЛ2:СпособПередачи>
        <Вх_ВЗЛ2:НомерВнешний>0000000</Вх_ВЗЛ2:НомерВнешний>
        <Вх_ВЗЛ2:ДатаЗаполнения>2019-03-04</Вх_ВЗЛ2:ДатаЗаполнения>
        <Вх_ВЗЛ2:ДатаПодачи>2019-03-04</Вх_ВЗЛ2:ДатаПодачи>
    </СлужебнаяИнформация>
</ЭДПФР>
...
Рейтинг: 0 / 0
Как работать с xmltable если в xml русские namespace
    #39784394
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dJabber,

Добрый день.

Что-то типа Example: Using XSLT to remove namespaces , только вам надо заменить namespaces на URI без русских букв, а не удалить.
Я не специалист в XSLT преобразованиях, поэтому готового решения у меня нет.
...
Рейтинг: 0 / 0
Как работать с xmltable если в xml русские namespace
    #39784488
dJabber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,

т.е. фактически вариант только один - тем или иным способом избавляться от русских неймспейсов?
...
Рейтинг: 0 / 0
Как работать с xmltable если в xml русские namespace
    #39784589
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dJabber,

А в какой кодировке вы работаете с базой? Кодировка клиента, кодировка базы?
...
Рейтинг: 0 / 0
Как работать с xmltable если в xml русские namespace
    #39784618
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dJabberт.е. фактически вариант только один - тем или иным способом избавляться от русских неймспейсов?По-моему - да.
Можно еще Case в поддержку DB2 открыть, чтобы узнать, бага это или фича...
...
Рейтинг: 0 / 0
Как работать с xmltable если в xml русские namespace
    #39785671
dJabber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,
спасибо, попробую кейс открыть :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как работать с xmltable если в xml русские namespace
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]