powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема
69 сообщений из 69, показаны все 3 страниц
Парсинг XML, проблема
    #39498123
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь распарсить XML, чтобы потом раскидать по таблице.
Код: plsql
1.
2.
3.
4.
5.
6.
        otvet             clob;
otvet_s:=XMLTYPE(otvet);

SELECT extractvalue(VALUE(it), '/ns2:ExportPaymentDocumentDetails/ns2:PaymentDocument/ns2:UnifiedAccountNumber') PaymentDocumentID

  FROM TABLE(xmlsequence(extract(otvet_s,'S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails'))) it



Выдает ошибку
Код: plsql
1.
2.
3.
4.
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00601: Invalid token in: 'S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails'
ORA-06512: at line 22



XML выглядит так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope>
<S:Body>
<ns3:exportPaymentDocumentDetailsResponse>
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>



Впервые чем-то подобным занимаюсь, не могу понять, куда копать, все мозги сломал) Помогите плиз)
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498138
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Что-то ты не договариваешь. У ответа SOAP-сервиса xmlns должны быть прописаны.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498145
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

xmlns из самого xml удалил, они вроде тут роли не играют? Или они где-то в селекте должны быть прописаны тож?
Пробовал еще так, ситуация аналогичная. xmlns изменены)

Код: plsql
1.
2.
3.
4.
5.
SELECT
nvl(d.extract ('*/ns2:PaymentDocument/PaymentDocumentID/text()','xmlns:ns2="http://qqqq.ru/r5').getstringval(),'')   PaymentDocumentID
from table (xmlsequence(otvet_s.extract('S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails',
'xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://uuu.ru/" 
xmlns:ns5="http://ru.eee"'))) d
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498152
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413xmlns из самого xml удалил
Заботливо разложенные грабли.

Напиши код на java или c# с обращением к методам из библиотек внешних классов, а потом удалить секцию import/using . примерно то же самое получится.

Верни как было и покажи пример нормального входного xml.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498162
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Using XQuery with Oracle XML DB
XMLTABLE


Код: 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.
with t as 
(select '<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://some.org" xmlns:ns2="http://some2.org" xmlns:ns3="http://some3.org">
<S:Body>
<ns3:exportPaymentDocumentDetailsResponse>
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>' x from dual)
select *
from t,
    xmltable(xmlnamespaces('http://some.org' as "S", 'http://some2.org' as "ns2", 'http://some3.org' as "ns3"),
             'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument'
             passing xmltype(x) 
             columns 
                 UnifiedAccountNumber varchar2(250) path '/ns2:UnifiedAccountNumber'
);
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498167
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Я имею в виду, что я их здесь не прописал, а не вообще удалил. Вот XML. xmlns (ns2, ns3, ns5) слегка изменены

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body >
<ns3:exportPaymentDocumentDetailsRespons xmlns:ns2="http://qqqq.ru/r5" 
xmlns:ns3="http://uuu.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.eee">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498183
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Уже выше ответил.
И ты опять xml покалечил, на этот раз в разрезе парности тегов.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498186
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Спасибо. Но это дает мне null в поля столбца UnifiedAccountNumber. Если по аналогии
Код: plsql
1.
'http://some.org' as "S", 'http://some2.org' as "ns2", 'http://some3.org' as "ns3"

добавить существующие ns4 и ns5 - результат тот же 8(
Попробую почитать документацию по ссылкам. Но если есть еще идеи - буду признателен)
Вот норм XML, если это имеет значение
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498192
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Надеюсь, заменить адреса в xmlnamespaces на совпадающие с реальностью ума хватило.

Показывай на with, что там у тебя даёт пустое значение.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498202
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Да, хватило)
Вот это дает null в UnifiedAccountNumber.
Пробовал и с (,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"), и без них

Код: 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.
with t as (select '<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>' x from dual)
select * from t, xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing xmltype(x) 
             columns 
                 UnifiedAccountNumber varchar2(250) path '/ns2:UnifiedAccountNumber'
);
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498204
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Версия оракла какая? У меня возвращает.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498205
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Код: 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.
with t as (select '<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>' x 
from dual)
select /*+ NO_XML_QUERY_REWRITE */ z.* 
from t, 
xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing xmltype(x) 
             columns 
                 UnifiedAccountNumber varchar2(250) path '/ns2:UnifiedAccountNumber'
) z;


А так тоже null возвращает?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498209
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Код: plsql
1.
UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498210
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем проблема, я не понимаю?

Код: 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.
with t as 
(select '<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" xmlns:ns5="http://ru.someurl.smev.gis/dict">
            <ns2:ExportPaymentDocumentDetails>
                <ns2:PaymentDocument>
                    <ns2:PaymentDocumentID>test1</ns2:PaymentDocumentID>
                    <ns2:UnifiedAccountNumber>test2</ns2:UnifiedAccountNumber>
                    <ns2:AccountNumber>test3</ns2:AccountNumber>
                    <ns2:MCServiceID>test4</ns2:MCServiceID>
                </ns2:PaymentDocument>
                <ns2:PaymentDocument>
                    <ns2:PaymentDocumentID>test5</ns2:PaymentDocumentID>
                    <ns2:UnifiedAccountNumber>test6</ns2:UnifiedAccountNumber>
                    <ns2:AccountNumber>test7</ns2:AccountNumber>
                    <ns2:MCServiceID>test8</ns2:MCServiceID>
                </ns2:PaymentDocument>
            </ns2:ExportPaymentDocumentDetails>
        </ns3:exportPaymentDocumentDetailsResponse>
    </S:Body>
</S:Envelope>' x from dual)
select 
  PaymentDocumentID,
  UnifiedAccountNumber,
  AccountNumber,
  MCServiceID  
from t,
    xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"),
             'S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails/ns2:PaymentDocument'
             passing xmltype(x) 
             columns 
                 PaymentDocumentID        varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber     varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber            varchar2(250) path 'ns2:AccountNumber',
                 MCServiceID              varchar2(250) path 'ns2:MCServiceID'
);
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498211
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй,

Забавно отрабатывает на 11.2.0.4
Код: 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.
SQL>with t as (select '<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>' x 
from dual)
select  z.* 
from t, 
xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing xmltype(x) 
             columns 
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
) z;

UNIFIEDACCOUNTNUMBER                                                           
--------------------------------------------------------------------------------
11AA223344                                                                      
11AA223344

SQL>with t as (select '<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>' x 
from dual)
select  z.* 
from t, 
xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing xmltype(x) 
             columns 
                 UnifiedAccountNumber varchar2(250) path '/ns2:UnifiedAccountNumber'
) z;

UNIFIEDACCOUNTNUMBER                                                           
--------------------------------------------------------------------------------
11AA223344-01-707211AA223344111AA22334411AA223344-01                            
11AA223344-01-706611AA22334411AA22334411AA223344-01 
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498214
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

под рукой только 10.2.0.5.0 :)
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498224
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Так возвращает ошибку

Код: plsql
1.
2.
3.
4.
5.
ORA-19112: error raised during evaluation:  
ORA-06550: line 1, column 13:
PLS-00201: identifier 'SYS.DBMS_XQUERYINT' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored



Версия оракла 10.2.0.4.0

А вот так с предыдущим вариантом возвращает норм)

Код: plsql
1.
UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'



Спасибо за помощь)
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498225
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

Спасибо)

Теперь все норм парсит)
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498234
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И пара вопросов чисто на интерес - что кроме документации почитать про все это дело? Про Oracle в целом и работу XML в частности) Может на русском кто-ть что-ть хорошее написал?)
И те методы парсинга, которые я пытался использовать изначально - они как-то морально устарели, или что вообще с ними не так? Или с ними все не так?)
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498248
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413, почему? ты все правильно сделал. Потыркался 5 минут, не получилось, написал сюда. Тебе тут все разжевали и сделали, пока ты кофе наливал. Разве не идеальный вариант?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498274
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, как расковырять вложенный xml? От сервиса 1С XML приходит в соаповском конверте.
Для строкового типа 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.
with src as (
select xmltype(
       replace('
              
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <m:mon xmlns:m="http://aaa.com">
   <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
[lt;?xml version=[quot;1.0[quot;?[gt;
[lt;test xmlns=[quot;http://aaa.ru[quot; xmlns:xs=[quot;http://www.w3.org/2001/XMLSchema[quot; xmlns:xsi=[quot;http://www.w3.org/2001/XMLSchema-instance[quot;[gt;
[lt;inner[gt;
text
[lt;/inner[gt;
[lt;/test[gt;
   </m:return>
  </m:mon>
 </soap:Body>
</soap:Envelope>

','[','&')) xml_body from dual )
select *
from xmltable ( xmlnamespaces ( 'http://schemas.xmlsoap.org/soap/envelope/' as "s",
                                'http://aaa.com' as "m"),
                '/s:Envelope/s:Body/m:mon/m:return' passing (select xml_body from src)
                columns txt xmltype path '/')                                 
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498287
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Азагаш, что нужно получить?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498288
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АзагашДля строкового типа XML великоват.
Так не используй строковые типы данных ограниченного размера. Бери clob/blob/bfilename.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498295
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary Denis, получить надо текст text , например

AmKad, а как тогда побороть квотирование?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498297
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
Если без клоба не обойтись, то придется читать его блоками, заменять < на <, складывать обратно в клоб, попутно выясняя, не отправил ли я куски одного < в разных блоках, и уже потом скармливать все это xmltype. Не то чтобы очень элегантно :(
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498298
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким образом ты получаешь свой XML? Загружаешь из файла, получаешь в рез-те http-запроса или как-то еще?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498299
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Азагаш,

XMLTYPE constructor
constructor function XMLType(
xmlData IN clob,
...
REPLACE
Both search_string and replacement_string, as well as char, can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498325
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
оказалось, что попадает он ко мне через varchar2(32000) из utl_http.read_text, спасибо

env,
каюсь, написал не попробовав, спасибо
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498332
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Азагашоказалось, что попадает он ко мне через varchar2(32000) из utl_http.read_textRead_raw-то небось понадежнее будет. Кодировку потом параметризировать можно.

Ну так что, проблема решилась?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498345
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadRead_raw-то небось понадежнее будет. Кодировку потом параметризировать можно.
Ну так что, проблема решилась?
пока не особо. если разквочивать влоб - получаю "ORA-19011: Недостаточный размер буфера символьных строк"
сам конверт режу при получении, т.к. он постоянной длины. не то чтобы шибко универсально, но мне этого и не нужно.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498350
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Азагашпока не особо. если разквочивать влоб - получаю "ORA-19011: Недостаточный размер буфера символьных строк"Так ты до работы с XML еще и не добрался. Читай в доке по utl_http примеры получения данных. И юзай read_raw для последующей записи в blob, а не read_text + clob.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498375
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
а что потом делать с блобом? реплейсом расквочивать и потом все это скармливать XMLType?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498379
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В виде того селекта все работает отлично. Но если прописать через Declare или в процедуру разбивается об ошибку

Код: plsql
1.
2.
3.
4.
ORA-19112: error raised during evaluation:  
ORA-06550: line 1, column 13:
PLS-00201: identifier 'SYS.DBMS_XQUERYINT' must be declared
ORA-06550: line 1, column 7:



Оракл 10 версии, JVM не установлен. Можно ли как-то обойти, или нужно ставить?

Вот пример

Код: 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.
declare 
        otvet             clob;
        otvet_s           XMLTYPE;
        zapros clob;
        begin
        zapros:='<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <S:Body>
    <ns4:exportPaymentDocumentDetails xmlns:ns2="http://www.w3.org/2004/08/xop/include" xmlns:ns3="http://smev.gosuslugi.ru/rev120315" xmlns:ns4="http://front.export.gis.smev.someurl.ru/" xmlns:ns5="http://ru.someurl.smev.gis/dict">
      <ns3:PaymentDocumentDetailsRequest>
        <ns3:UnifiedAccountNumber>11AA223344</ns3:UnifiedAccountNumber>
      </ns3:PaymentDocumentDetailsRequest>
		</ns4:exportPaymentDocumentDetails>
	</S:Body>
</S:Envelope> 
';
     otvet      :=  PAY_test(zapros);
     otvet_s:=XMLTYPE(otvet);
begin
for c in(
with t as (select otvet_s from dual)
select *
 from t, xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing otvet_s 
             columns 
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
))
loop
insert into XTEST (id_1, id_2, ID) values ('2','2',c.unifiedaccountnumber);

 commit;
 end loop;
return;
end;
end;
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498422
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АзагашAmKad,
а что потом делать с блобом? реплейсом расквочивать и потом все это скармливать XMLType?Сначала изучить содержимое блоба. Что там вообще приходит в ответе. И потом уже принимать решение о том, что делать дальше.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498436
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

внутри soap-конверта

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <m:mon xmlns:m="http://aaa.com">
   <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   </m:return>
  </m:mon>
 </soap:Body>
</soap:Envelope>



лежит xml

Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0"?>
<test xmlns="http://aaa.ru" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<inner>
text
</inner>
</test>



у которого все "<" изменены на "& lt ;", все ">" - на "& gt ;", и все " " " - на "& quot ;"
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498441
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
column x format a30

with s as
(select xmlelement("x", '>') x
 from dual
)
select *
from s,
xmltable
('/x'
passing s.x
columns
x varchar2(100) path '.'
);

X                              X
------------------------------ ------------------------------
<x>&gt;</x>                    >

Затрач.время: 00:00:00.01
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498445
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Ответ точно корректный получается в анонимном блоке?
И попробуй в запросе прибить гвоздями /*+ NO_XML_QUERY_REWRITE */
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498453
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Ответ точно нормальный. Даже если опустить функцию и просто вбить туда ответ - ситуация та же.
/*+ NO_XML_QUERY_REWRITE */ ситуацию не изменил 8(
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498464
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты ответ к xmltype-типу привести пробовал? Читай сигнатуру конструктора xmltype с blob-ом. Потом возьми от него xmltable.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498491
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for c in(
select UnifiedAccountNumber
 from xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing otvet_s 
             columns 
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
))
loop
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498743
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

А вот так отлично работает) Спасибо)) А почему так происходит?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498772
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Из-за этого
Код: plsql
1.
2.
select *
  from t, ..


Дальше думай сам.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39499719
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мммммм, у меня снова проблема
После парсинга функция вставляет в таблицу только одну запись, хотя по идее их должно быть несколько. Есть делать парсинг просто селектом, выводит несколько значений, все нормально. Не могу разобраться

Код: 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.
CREATE OR REPLACE FUNCTION
(
       req_id       in    number,
       outp         in    clob
        )
        return varchar2 is inp VARCHAR2(4000);
        zapros          clob;
        otvet             clob;
        otvet_s           XMLTYPE;
        PaymentDocumentID VARCHAR2(4000);
        UnifiedAccountNumber VARCHAR2(4000);
        AccountNumber varchar2(4000);
        req number(16);
        req1 number (16);
surname VARCHAR2(4000);
req_id_new           NUMBER(16);
        begin
          select sequence_1.NEXTVAL into req_id_new from dual;
          select sequence_1.NEXTVAL into req from dual;
          select sequence_1.NEXTVAL into req1 from dual;
     zapros     :=     outp;
     
     insert into gis_reqstest values (req_id_new,zapros, null);
     commit;
     otvet      :=  PAY_test(zapros);
     otvet_s:=XMLTYPE(otvet);
     
     update usb_gis_reqstest q
     set q.outp = XMLTYPE(otvet)
     where q.type = req_id_new;
     commit;
     
  
     for c in (select PaymentDocumentID, UnifiedAccountNumber, AccountNumber
 from  xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocumentID' passing otvet_s 
             columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber')) loop
     
insert into GIS_INFO (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNumber,ACCOUNTNUMBER)  values 
(req_id_new,req,req1,c.PaymentDocumentID,c.UnifiedAccountNumber,c.AccountNumber);

 commit;
 end loop;
end



Сам XML

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>



Тэгов <ns2:PaymentDocument> может быть произвольное количество
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39499742
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Зачем тебе commit на каждую строчку?

И в целом, зачем тут цикл? insert .. select .. напрашивается.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500061
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Это про коммит из цикла? Если его вынести за цикл вообще ж ничего не вставляет
При попытке сделать insert ... select пишет ошибку ora-00947 not enough values. Хотя валуев-то вроде достаточно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
insert into USB_GISZHKH_INFO_4701 (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNUMBER,ACCOUNTNUMBER) values

 (req_id_new,req,req1,
(select PaymentDocumentID, UnifiedAccountNumber, AccountNumber
 from  xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocumentID' passing otvet_s 
             columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber')));
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500084
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Эм... Как бы так вежливо-то сказать, что такого говнокода на ровном месте давно не видал, разве что у некоего RДошкольника....

Код: plsql
1.
2.
3.
values
 (req_id_new,req,req1,
(select PaymentDocumentID, UnifiedAccountNumber, AccountNumber


Сам понял, что написал? Сколько полей в values составляет твоё (select ...


Я говорю про
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
insert into insert into USB_GISZHKH_INFO_4701 (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNUMBER,ACCOUNTNUMBER) 
select req_id_new as id_rec, req as id_req, req1 as id_record, t.PaymentDocumentID, t.UnifiedAccountNumber, t.AccountNumber
from 
(select PaymentDocumentID, UnifiedAccountNumber, AccountNumber
 from  xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocumentID' passing otvet_s 
             columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber')
) t


И возьми себе за правило давать переменным префиксы, позволяющие однозначно отделять их от потенциальных совпадающих полей таблиц в запросах. И алиасы, помни про алиасы.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500098
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Спасибо, так все норм компилируется. Алиасы обычно не используя, да, вероятно, стоит.

Но вот только с таким вариантом кода в таблицу вообще ничего не вставляется 8(
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500103
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Значит, внутри процедуры не тот же xml, на котором отлаживаешь запрос.

Добавь промежуточную отладку, посмотри, что у тебя на самом деле в otvet_s и т.д.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500119
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

otvet_s тоже пишется в промежуточную таблицу, он не менялся. Если вернуться на вариант с циклом - так же одна запись вставляется в таблицу.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500151
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,
СтаниславскийНе верю!

выведи в dbms_output значение otvet_s на входе в цикл и продемонстрируй в виде листинга в sqlplus
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500174
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

боюсь, это выше моих сил
Вот здесь otvet_s прописывается в таблицу
Код: plsql
1.
2.
3.
4.
     update usb_gis_reqstest q
     set q.outp = XMLTYPE(otvet)
     where q.type = req_id_new;
     commit;


Да и как может измениться ответ от другой функции при смене цикла на селект? Ответ всегда один и тот же, схема тестовая.
Непонятно О_о
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500225
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Код: plsql
1.
2.
3.
4.
5.
otvet_s:=XMLTYPE(otvet);
     
     update usb_gis_reqstest q
     set q.outp =XMLTYPE(otvet)
     where q.type = req_id_new;



И где тут
jukka413otvet_s прописывается в таблицу?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500232
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Извиняюсь, если полностью, то

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert into usb_giszhkh_reqstest values (req_id_new,zapros, null);
     commit;
     otvet      :=  USB$PAY_GIS_ZHKH_test(zapros);
     otvet_s:=XMLTYPE(otvet);
     
     update usb_giszhkh_reqstest q
     set q.outp = XMLTYPE(otvet)
     where q.type = req_id_new;
     commit;



Если прописать set q.outp = otvet_s - результат тот же
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500244
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Что значит "тот же"?

Переделай запрос на select .. from usb_giszhkh_reqstest t, xmltable(.. passing outp ... ) x where t.type = req_id_new.

И покажи листинг запроса в sqlplus на конкретном t.type.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500253
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,


envИ покажи листинг запроса в sqlplus на конкретном t.type. - я не знаю, как это сделать.

Ответ не меняется, он тот же самый, что я приводил в начале.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>



А через цикл почему вставлялась только одна запись?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500263
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Возможно какие-то приколы 10g, у меня нет этой версии под рукой, чтобы проверять.

insert select на чтение из таблицы перенаправил?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500280
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Что-то я сегодня вообще туплю)

env
insert select на чтение из таблицы перенаправил?

Всмыле?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500282
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Код: plsql
1.
select .. from usb_giszhkh_reqstest t, xmltable(.. passing t.outp ... ) x where t.type = req_id_new
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500299
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Это сделал, сам селект выводит нормально все значения)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select PaymentDocumentID, UnifiedAccountNumber, AccountNumber from usb_giszhkh_reqstest t, xmltable(xmlnamespaces
('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing t.outp columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber') x where t.type = 84
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500306
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Однако инсерт в таблицу по прежнему ничего не вставляет

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 insert into USB_GISZHKH_INFO_4701 (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNUMBER,ACCOUNTNUMBER) 
select req_id_new as id_rec, req as id_req, req1 as id_record, x.PaymentDocumentID, x.UnifiedAccountNumber, x.AccountNumber
from 
 usb_giszhkh_reqstest t, xmltable(xmlnamespaces
('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing t.outp columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber') x where t.type=req_id_new;
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500317
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,
после инсерта комит есть ?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500319
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

да
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500330
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй,

Если ты теперь возьмёшь известный тебе идентификатор строки таблицы и по нему выполнишь этот insert .. select ... вне процедуры - что будет?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500342
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Ошибка

Код: plsql
1.
2.
ORA-00001: unique constraint violated
ORA-06512: at line 13



Вот код

Код: 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.
declare 
        otvet             clob;
        otvet_s           XMLTYPE;
        zapros4100 clob;
        req_id_new number (20);
        req number(16);
        req1 number (16);
        begin
          select sequence_1.NEXTVAL into req_id_new from dual;
          select sequence_1.NEXTVAL into req from dual;
          select sequence_1.NEXTVAL into req1 from dual;
begin
  insert into USB_GISZHKH_INFO_4701 (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNUMBER,ACCOUNTNUMBER) 
select req_id_new as id_rec, req as id_req, req1 as id_record, x.PaymentDocumentID, x.UnifiedAccountNumber, x.AccountNumber
from  
usb_giszhkh_reqstest t, xmltable(xmlnamespaces
('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing t.outp columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber') x where t.type = 87;
commit;
return;
end;
end;
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500345
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

т.е. запись в таблице таки есть
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500407
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

ммммм, нет
В таблице USB_GISZHKH_INFO_4701 такой записи нет О_о
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500412
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Тогда придётся ещё раз щёлкнуть тебя по носу.

Смотреть в сторону unique index на id_rec. Одна запись вставлялась, а потом остальные падали на unique constraint violation, который похоже глотается чем-то вроде when others then null.

А вставка всех записей разом сразу ловит unique constraint violation, который опять же глотается.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500416
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Мммммм, кажется я только примерно понял о чем речь и совсем не понял, как этого избежать)
Чтобы не падало на unique constraint violation
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500428
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Смотри какие у тебя индексы есть на USB_GISZHKH_INFO_4701. Какие из них уникальные, какие поля в них входят.

И на обработку exception в коде.
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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