Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML Parse with custom schema / 6 сообщений из 6, страница 1 из 1
15.02.2022, 16:43
    #40134294
yabs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Parse with custom schema
Всем доброго дня.

Пытаюсь распарсить XML.
Если элементы без префикса invoice , то все работает.
Код: sql
1.
2.
3.
4.
5.
select extractvalue(xmltype('<invoiceMessage xmlns:invoice="urn:gs1:ecom:invoice:xsd:3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:eanucc="urn:ean.ucc:2" xsi:schemaLocation="urn:gs1:ecom:invoice:xsd:3 ../Schemas/gs1/ecom/Invoice.xsd">
45
</invoiceMessage>
'),'/invoiceMessage')
from dual;



Как только добавляешь invoice: , то ничего не находит.
Код: sql
1.
2.
3.
4.
5.
select extractvalue(xmltype('<invoice:invoiceMessage xmlns:invoice="urn:gs1:ecom:invoice:xsd:3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:eanucc="urn:ean.ucc:2" xsi:schemaLocation="urn:gs1:ecom:invoice:xsd:3 ../Schemas/gs1/ecom/Invoice.xsd">
45
</invoice:invoiceMessage>
'),'/invoiceMessage')
from dual;



Ткните носом, что я должен передать в функцию xmltype , чтобы парсер нашел мой элемент. Заранее спасибо.
...
Рейтинг: 0 / 0
15.02.2022, 17:11
    #40134308
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Parse with custom schema
yabs,
Код: plsql
1.
2.
3.
4.
5.
select extractvalue(xmltype('<invoice:invoiceMessage xmlns:invoice="urn:gs1:ecom:invoice:xsd:3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:eanucc="urn:ean.ucc:2" xsi:schemaLocation="urn:gs1:ecom:invoice:xsd:3 ../Schemas/gs1/ecom/Invoice.xsd">
45
</invoice:invoiceMessage>
'),'/invoice:invoiceMessage', 'xmlns:invoice="urn:gs1:ecom:invoice:xsd:3"')
from dual;
...
Рейтинг: 0 / 0
15.02.2022, 17:23
    #40134310
yabs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Parse with custom schema
rpovarov,

спасибо!
Я схему вообще в другое место пытался передать.

constructor function XMLType(
xmlData IN blob, csid IN number,
schema IN varchar2 := NULL,
validated IN number := 0,
wellformed IN number := 0)
return self as result deterministic
...
Рейтинг: 0 / 0
15.02.2022, 17:50
    #40134318
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Parse with custom schema
...
Рейтинг: 0 / 0
15.02.2022, 18:03
    #40134320
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Parse with custom schema
yabs,

Читаем доку:

EXTRACTVALUE
Note:The EXTRACTVALUE function is deprecated . It is still supported for backward compatibility. However, Oracle recommends that you use the XMLTABLE function, or the XMLCAST and XMLQUERY functions instead. See XMLTABLE, XMLCAST, and XMLQUERY for more information.

XMLQUERY:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select  xmlcast(
                xmlquery(
                         'declare namespace invoice="urn:gs1:ecom:invoice:xsd:3"; (: :)
                            xs:integer(invoice:invoiceMessage)'
                         passing xmltype('<invoice:invoiceMessage xmlns:invoice="urn:gs1:ecom:invoice:xsd:3"
                                           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                           xmlns:sh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader"
                                           xmlns:eanucc="urn:ean.ucc:2"
                                           xsi:schemaLocation="urn:gs1:ecom:invoice:xsd:3 ../Schemas/gs1/ecom/Invoice.xsd">45</invoice:invoiceMessage>')
                         returning content
                        )
                as number
               ) invoiceMessage
from dual
/

INVOICEMESSAGE
--------------
            45

SQL>



XMLTABLE:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select  invoiceMessage
  from  xmltable(
                 xmlnamespaces(
                               'urn:gs1:ecom:invoice:xsd:3' as "invoice"
                              ),
                 '/invoice:invoiceMessage'
                 passing xmltype('<invoice:invoiceMessage xmlns:invoice="urn:gs1:ecom:invoice:xsd:3"
                                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                  xmlns:sh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader"
                                  xmlns:eanucc="urn:ean.ucc:2" 
                                  xsi:schemaLocation="urn:gs1:ecom:invoice:xsd:3 ../Schemas/gs1/ecom/Invoice.xsd">45</invoice:invoiceMessage>')
                 columns
                   invoiceMessage number path '.'
                )
/

INVOICEMESSAGE
--------------
            45

SQL>



SY.
...
Рейтинг: 0 / 0
15.02.2022, 18:20
    #40134325
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Parse with custom schema
SY
Код: plsql
1.
2.
3.
xmlquery(...
   for $e in /invoice:invoiceMessage
      return xs:integer($e)'


тут не нужен for, достаточно
Код: plsql
1.
/invoice:invoiceMessage

а если уж так хочется кастануть в xs:integer, то
Код: plsql
1.
/invoice:invoiceMessage/xs:integer(.)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML Parse with custom schema / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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