Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
Пытаюсь распарсить XML, чтобы потом раскидать по таблице.
        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


Выдает ошибку
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 выглядит так

<?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>


Впервые чем-то подобным занимаюсь, не могу понять, куда копать, все мозги сломал) Помогите плиз)
1 авг 17, 08:56    [20690114]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
jukka413,

Что-то ты не договариваешь. У ответа SOAP-сервиса xmlns должны быть прописаны.
1 авг 17, 09:20    [20690187]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
env,

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

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
1 авг 17, 09:28    [20690214]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
jukka413
xmlns из самого xml удалил

Заботливо разложенные грабли.

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

Верни как было и покажи пример нормального входного xml.
1 авг 17, 09:44    [20690288]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
jukka413,

Using XQuery with Oracle XML DB
XMLTABLE


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'
);
1 авг 17, 09:53    [20690324]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
env,

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

<?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>
1 авг 17, 09:59    [20690342]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
jukka413,

Уже выше ответил.
И ты опять xml покалечил, на этот раз в разрезе парности тегов.
1 авг 17, 10:22    [20690418]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
env,

Спасибо. Но это дает мне null в поля столбца UnifiedAccountNumber. Если по аналогии
'http://some.org' as "S", 'http://some2.org' as "ns2", 'http://some3.org' as "ns3"
добавить существующие ns4 и ns5 - результат тот же 8(
Попробую почитать документацию по ссылкам. Но если есть еще идеи - буду признателен)
Вот норм XML, если это имеет значение
<?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>
1 авг 17, 10:27    [20690446]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
jukka413,

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

Показывай на with, что там у тебя даёт пустое значение.
1 авг 17, 10:30    [20690463]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
env,

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

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'
);
1 авг 17, 10:39    [20690492]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
jukka413,

Версия оракла какая? У меня возвращает.
1 авг 17, 10:42    [20690502]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
jukka413,

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 возвращает?
1 авг 17, 10:43    [20690510]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
123йй
Member

Откуда:
Сообщений: 1638
jukka413,

UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
1 авг 17, 10:46    [20690529]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
Lary Denis
Guest
А в чем проблема, я не понимаю?

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'
);
1 авг 17, 10:48    [20690542]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6731
123йй,

Забавно отрабатывает на 11.2.0.4
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 
1 авг 17, 10:50    [20690552]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
123йй
Member

Откуда:
Сообщений: 1638
env,

под рукой только 10.2.0.5.0 :)
1 авг 17, 10:53    [20690574]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
env,

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

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

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

UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'


Спасибо за помощь)
1 авг 17, 11:04    [20690653]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
123йй,

Спасибо)

Теперь все норм парсит)
1 авг 17, 11:04    [20690656]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
jukka413
Member

Откуда:
Сообщений: 58
И пара вопросов чисто на интерес - что кроме документации почитать про все это дело? Про Oracle в целом и работу XML в частности) Может на русском кто-ть что-ть хорошее написал?)
И те методы парсинга, которые я пытался использовать изначально - они как-то морально устарели, или что вообще с ними не так? Или с ними все не так?)
1 авг 17, 11:10    [20690690]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
Lary Denis
Guest
jukka413, почему? ты все правильно сделал. Потыркался 5 минут, не получилось, написал сюда. Тебе тут все разжевали и сделали, пока ты кофе наливал. Разве не идеальный вариант?
1 авг 17, 11:24    [20690797]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
Азагаш
Member

Откуда:
Сообщений: 450
Подскажите, как расковырять вложенный xml? От сервиса 1С XML приходит в соаповском конверте.
Для строкового типа XML великоват. Как выйти из ситуации?

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 '/')                                 
1 авг 17, 11:45    [20690935]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
Lary Denis
Guest
Азагаш, что нужно получить?
1 авг 17, 12:14    [20691063]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Азагаш
Для строкового типа XML великоват.
Так не используй строковые типы данных ограниченного размера. Бери clob/blob/bfilename.
1 авг 17, 12:16    [20691071]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
Азагаш
Member

Откуда:
Сообщений: 450
Lary Denis, получить надо текст text, например

AmKad, а как тогда побороть квотирование?
1 авг 17, 12:26    [20691123]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML, проблема  [new]
Азагаш
Member

Откуда:
Сообщений: 450
AmKad,
Если без клоба не обойтись, то придется читать его блоками, заменять < на <, складывать обратно в клоб, попутно выясняя, не отправил ли я куски одного < в разных блоках, и уже потом скармливать все это xmltype. Не то чтобы очень элегантно :(
1 авг 17, 12:32    [20691151]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Oracle Ответить