Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсим XML ЦБ БИК / 5 сообщений из 5, страница 1 из 1
01.09.2020, 20:30
    #39994632
Парсим XML ЦБ БИК
Братцы, честно признаюсь, что пришёл ради экономии времени за готовым решением, у кого оно вдруг имеется (или около того).
Вот здесь https://www.cbr.ru/s/newbik у ЦБ обновляется (видимо раз в месяц) структура БИК. Посоветуйте, как за недорого затащить её в табличку (ну, вернее, тут две будет, к вроде как). Внешнюю табличку думаю сделать. Единственно, что стрясётся при обновлении файла скриптом ежемесячном тоже вопрос...

Получаемый XML, сокращённый до одной записи BICDirectoryEntry такой:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	
<?xml version="1.0" encoding="Windows-1251"?>
<ED807 xmlns="urn:cbr-ru:ed:v2.0" EDNo="709594854" EDDate="2020-08-31" EDAuthor="4583001999" CreationReason="FCBD" CreationDateTime="2020-08-31T18:02:12Z" InfoTypeCode="FIRR" BusinessDay="2020-09-01" DirectoryVersion="1">
<BICDirectoryEntry BIC="041280103">
		<ParticipantInfo NameP="УФК по Астраханской области" CntrCd="RU" Rgn="12" Ind="414056" Tnp="г" Nnp="Астрахань" Adr="ул Латышева, 6 Г" DateIn="2010-06-08" PtType="52" Srvcs="3" XchType="1" UID="1280002005" ParticipantStatus="PSAC"/>
		<Accounts Account="40116810100000010010" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
		<Accounts Account="40116810400000010011" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
		<Accounts Account="40116810700000010012" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
		<Accounts Account="40116810000000010013" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
		<Accounts Account="40116810300000010014" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
		<Accounts Account="40116810600000010015" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
	</BICDirectoryEntry>
</ED807>
...
Рейтинг: 0 / 0
01.09.2020, 20:42
    #39994635
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсим XML ЦБ БИК
Саша Сплинтер,

xmltable. Примеров полно на форуме.
...
Рейтинг: 0 / 0
25.11.2020, 14:47
    #40022101
qwe_dsa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсим XML ЦБ БИК
Саша Сплинтер,
не в тему, но где взять расшифровку этих заголовков -UID ParticipantStatus RegN PrntBIC EnglName Rstr RstrDate?
...
Рейтинг: 0 / 0
25.11.2020, 18:28
    #40022166
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсим XML ЦБ БИК
Код: 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.
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.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
create table dropme_BICDirectory(id integer primary key
            ,  EDNo varchar2(10)
            , EDDate  varchar2(50)
            , EDAuthor varchar2(50)
            , CreationReason varchar2(50)
            , CreationDateTime varchar2(50)
            , InfoTypeCode varchar2(50)
            , BusinessDay varchar2(50)
            , BIC varchar2(50)
            , ParticipantNameP varchar2(50)
            , ParticipantCntrCd varchar2(50)
            , ParticipantRgn varchar2(50)
            , ParticipantInd varchar2(50)
            , ParticipantTnp varchar2(50)
            , ParticipantNnp varchar2(50)
            , ParticipantAdr varchar2(50)
            , ParticipantDateIn varchar2(50)
            , ParticipantPtType varchar2(50)
            , ParticipantSrvcs varchar2(50)
            , ParticipantXchType varchar2(50)
            , ParticipantUID varchar2(50)
            , ParticipantStatus varchar2(50)
) nologging
;
 
Table created

create table dropme_Accounts(
                Account varchar2(50)
              , RegulationAccountType varchar2(50)
              , CK                    varchar2(50)
              , AccountCBRBIC         varchar2(50)
              , DateIn                varchar2(50)
              , AccountStatus         varchar2(50)
              , fk_BICDirectory       integer references dropme_BICDirectory(id)
) nologging
;
 
Table created

INSERT ALL
  WHEN n = 1 THEN
    INTO dropme_BICDirectory( id, EDNo, EDDate, EDAuthor, CreationReason, CreationDateTime, InfoTypeCode, BusinessDay, BIC
                            , ParticipantNameP, ParticipantCntrCd, ParticipantRgn, ParticipantInd, ParticipantTnp, ParticipantNnp
                            , ParticipantAdr, ParticipantDateIn, ParticipantPtType, ParticipantSrvcs, ParticipantXchType
                            , ParticipantUID, ParticipantStatus
            ) VALUES        ( SeqNo, EDNo, EDDate, EDAuthor, CreationReason, CreationDateTime, InfoTypeCode, BusinessDay, BIC
                            , ParticipantNameP, ParticipantCntrCd, ParticipantRgn, ParticipantInd, ParticipantTnp, ParticipantNnp
                            , ParticipantAdr, ParticipantDateIn, ParticipantPtType, ParticipantSrvcs, ParticipantXchType
                            , ParticipantUID, ParticipantStatus)
  ELSE
    INTO dropme_Accounts( Account, RegulationAccountType, CK, AccountCBRBIC, DateIn, AccountStatus, fk_BICDirectory
            ) VALUES    ( Account, RegulationAccountType, CK, AccountCBRBIC, DateIn, AccountStatus, SeqNo
            )
with t as (select q'{<?xml version="1.0" encoding="Windows-1251"?>
<ED807 xmlns="urn:cbr-ru:ed:v2.0" EDNo="709594854" EDDate="2020-08-31" EDAuthor="4583001999" CreationReason="FCBD" CreationDateTime="2020-08-31T18:02:12Z" InfoTypeCode="FIRR" BusinessDay="2020-09-01" DirectoryVersion="1">
<BICDirectoryEntry BIC="041280103">
    <ParticipantInfo NameP="УФК по Астраханской области" CntrCd="RU" Rgn="12" Ind="414056" Tnp="г" Nnp="Астрахань" Adr="ул Латышева, 6 Г" DateIn="2010-06-08" PtType="52" Srvcs="3" XchType="1" UID="1280002005" ParticipantStatus="PSAC"/>
    <Accounts Account="40116810100000010010" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810400000010011" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810700000010012" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810000000010013" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810300000010014" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810600000010015" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
  </BICDirectoryEntry>
<BICDirectoryEntry BIC="041280103">
    <ParticipantInfo NameP="УФК по Астраханской области" CntrCd="RU" Rgn="12" Ind="414056" Tnp="г" Nnp="Астрахань" Adr="ул Латышева, 6 Г" DateIn="2010-06-08" PtType="52" Srvcs="3" XchType="1" UID="1280002005" ParticipantStatus="PSAC"/>
    <Accounts Account="40116810100000010010" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810400000010011" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810700000010012" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810000000010013" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810300000010014" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
    <Accounts Account="40116810600000010015" RegulationAccountType="TRSA" CK="99" AccountCBRBIC="041280002" DateIn="2013-01-09" AccountStatus="ACAC"/>
  </BICDirectoryEntry>
</ED807>}' x from dual)
select *
 from t
    , xmltable( XMLNAMESPACES(DEFAULT 'urn:cbr-ru:ed:v2.0')
              , '/ED807/BICDirectoryEntry'
                passing xmltype(x)
                columns SeqNo for ordinality
              , EDNo varchar2(10) path './../@EDNo'
              , EDDate  varchar2(50) path './../@EDDate' --="2020-08-31"
              , EDAuthor varchar2(50) path './../@EDAuthor' --="4583001999"
              , CreationReason varchar2(50) path './../@CreationReason' --="FCBD"
              , CreationDateTime varchar2(50) path './../@CreationDateTime' --="2020-08-31T18:02:12Z"
              , InfoTypeCode varchar2(50) path './../@InfoTypeCode' --="FIRR"
              , BusinessDay varchar2(50) path './../@BusinessDay' --="2020-09-01"
              , BIC varchar2(50) path '@BIC' --="2020-09-01"
              , ParticipantNameP varchar2(50) path './ParticipantInfo[1]/@NameP'
              , ParticipantCntrCd varchar2(50) path './ParticipantInfo[1]/@CntrCd'
              , ParticipantRgn varchar2(50) path './ParticipantInfo[1]/@Rgn'
              , ParticipantInd varchar2(50) path './ParticipantInfo[1]/@Ind'
              , ParticipantTnp varchar2(50) path './ParticipantInfo[1]/@Tnp'
              , ParticipantNnp varchar2(50) path './ParticipantInfo[1]/@Nnp'
              , ParticipantAdr varchar2(50) path './ParticipantInfo[1]/@Adr'
              , ParticipantDateIn varchar2(50) path './ParticipantInfo[1]/@DateIn'
              , ParticipantPtType varchar2(50) path './ParticipantInfo[1]/@PtType'
              , ParticipantSrvcs varchar2(50) path './ParticipantInfo[1]/@Srvcs'
              , ParticipantXchType varchar2(50) path './ParticipantInfo[1]/@XchType'
              , ParticipantUID varchar2(50) path './ParticipantInfo[1]/@UID'
              , ParticipantStatus varchar2(50) path './ParticipantInfo[1]/@ParticipantStatus'
              , Accounts xmltype path 'Accounts'
    ) BICDirectoryEntry
    , xmltable( XMLNAMESPACES(DEFAULT 'urn:cbr-ru:ed:v2.0')
              , '/Accounts' passing BICDirectoryEntry.Accounts
                columns n for ordinality
              , Account varchar2(50) path '@Account'
              , RegulationAccountType varchar2(50) path '@RegulationAccountType'
              , CK                    varchar2(50) path '@CK'
              , AccountCBRBIC         varchar2(50) path '@AccountCBRBIC'
              , DateIn                varchar2(50) path '@DateIn'
              , AccountStatus         varchar2(50) path '@AccountStatus'
    )(+) Accounts
;
 
12 rows inserted
 
SQL> 

...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.01.2022, 18:09
    #40126899
Парсим XML ЦБ БИК
Благодарю, это работает.
Две копейки до полного решения:

Код: plsql
1.
2.
3.
4.
5.
create or replace directory bik as '/home/oracle/bik';
grant read on directory bik to public;
...
passing xmltype(BFilename('BIK','cbr_bik.xml'),NLS_Charset_ID('CL8MSWIN1251'))
...



А забираем вот так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
cd /home/oracle/bik/
rm *zip
rm *xml
curl -JLO https://www.cbr.ru/s/newbik
unzip *zip
rm *zip
mv *xml cbr_bik.xml
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсим XML ЦБ БИК / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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