powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема
25 сообщений из 69, страница 1 из 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
25 сообщений из 69, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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