Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема / 25 сообщений из 69, страница 1 из 3
01.08.2017, 08:56
    #39498123
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
Пытаюсь распарсить 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
01.08.2017, 09:20
    #39498138
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
jukka413,

Что-то ты не договариваешь. У ответа SOAP-сервиса xmlns должны быть прописаны.
...
Рейтинг: 0 / 0
01.08.2017, 09:28
    #39498145
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 09:44
    #39498152
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
jukka413xmlns из самого xml удалил
Заботливо разложенные грабли.

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

Верни как было и покажи пример нормального входного xml.
...
Рейтинг: 0 / 0
01.08.2017, 09:53
    #39498162
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 09:59
    #39498167
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 10:22
    #39498183
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
jukka413,

Уже выше ответил.
И ты опять xml покалечил, на этот раз в разрезе парности тегов.
...
Рейтинг: 0 / 0
01.08.2017, 10:27
    #39498186
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 10:30
    #39498192
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
jukka413,

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

Показывай на with, что там у тебя даёт пустое значение.
...
Рейтинг: 0 / 0
01.08.2017, 10:39
    #39498202
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 10:42
    #39498204
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
jukka413,

Версия оракла какая? У меня возвращает.
...
Рейтинг: 0 / 0
01.08.2017, 10:43
    #39498205
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 10:46
    #39498209
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
jukka413,

Код: plsql
1.
UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
...
Рейтинг: 0 / 0
01.08.2017, 10:48
    #39498210
Lary Denis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг 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.
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
01.08.2017, 10:50
    #39498211
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 10:53
    #39498214
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
env,

под рукой только 10.2.0.5.0 :)
...
Рейтинг: 0 / 0
01.08.2017, 11:04
    #39498224
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
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
01.08.2017, 11:04
    #39498225
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
123йй,

Спасибо)

Теперь все норм парсит)
...
Рейтинг: 0 / 0
01.08.2017, 11:10
    #39498234
jukka413
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
И пара вопросов чисто на интерес - что кроме документации почитать про все это дело? Про Oracle в целом и работу XML в частности) Может на русском кто-ть что-ть хорошее написал?)
И те методы парсинга, которые я пытался использовать изначально - они как-то морально устарели, или что вообще с ними не так? Или с ними все не так?)
...
Рейтинг: 0 / 0
01.08.2017, 11:24
    #39498248
Lary Denis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
jukka413, почему? ты все правильно сделал. Потыркался 5 минут, не получилось, написал сюда. Тебе тут все разжевали и сделали, пока ты кофе наливал. Разве не идеальный вариант?
...
Рейтинг: 0 / 0
01.08.2017, 11:45
    #39498274
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
Подскажите, как расковырять вложенный 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
01.08.2017, 12:14
    #39498287
Lary Denis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
Азагаш, что нужно получить?
...
Рейтинг: 0 / 0
01.08.2017, 12:16
    #39498288
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
АзагашДля строкового типа XML великоват.
Так не используй строковые типы данных ограниченного размера. Бери clob/blob/bfilename.
...
Рейтинг: 0 / 0
01.08.2017, 12:26
    #39498295
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
Lary Denis, получить надо текст text , например

AmKad, а как тогда побороть квотирование?
...
Рейтинг: 0 / 0
01.08.2017, 12:32
    #39498297
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Парсинг XML, проблема
AmKad,
Если без клоба не обойтись, то придется читать его блоками, заменять < на <, складывать обратно в клоб, попутно выясняя, не отправил ли я куски одного < в разных блоках, и уже потом скармливать все это xmltype. Не то чтобы очень элегантно :(
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема / 25 сообщений из 69, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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