Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбор XML / 14 сообщений из 14, страница 1 из 1
11.12.2019, 12:19
    #39901155
Vlad001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
Добрый день.
Подскажите пожалуйста по задаче - есть несколько XML, отличие у них в namespace
1.
Код: xml
1.
2.
3.
4.
<?xml version="1.0" encoding="windows-1251"?>
<ABC xmlns="urn:qwe:rty:ABC:version1">
<ITEM rowNumber='1'>
...



2.
Код: xml
1.
2.
3.
4.
<?xml version="1.0" encoding="windows-1251"?>
<DEF xmlns="urn:qwe:rty:DEF:version1">
<ITEM rowNumber='1'>
...




Для запроса использую XMLTABLE c xmlnamespaces

Код: plsql
1.
2.
3.
4.
5.
select 
...
FROM xmlData x,
             XMLTABLE(xmlnamespaces(default 'urn:qwe:rty:ABC:version1'),  '*/ITEM' 
                      PASSING x.myxml  COLUMNS ...



Очень хочется иметь один запрос для обоих XML
При попытке использовать конструкцию
Код: plsql
1.
 XMLTABLE(xmlnamespaces(default 'urn:qwe:rty:'||myvar||':version1')



получаю ORA-02000 missing ) keyword

Каким выражением можно заменить строку в описании xmlnamespaces?
Что-нибудь типа
Код: plsql
1.
xmlnamespaces(default 'urn:qwe:rty:*:version1')



Спасибо!
...
Рейтинг: 0 / 0
11.12.2019, 12:34
    #39901171
Vlad001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
Пример с разными xmlnamespaces,
хочется выбирать из обоих наборов xmlData1 и xmlData2 при помощи одного запроса чем-то заменив xmlnamespaces(DEFAULT 'urn:qwe:rty: ABC :version1')

Код: 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 xmlData1 as
 (select XMLTYPE('<?xml version="1.0" encoding="Windows-1251" ?>
<First xmlns="urn:qwe:rty:ABC:version1">
  <Second>
    <Third>
      <Фамилия>Иванов</Фамилия>
      <Имя>Иван</Имя>
    </Third>
  </Second>
</First>') myxml
    from dual),

xmlData2 as
 (select XMLTYPE('<?xml version="1.0" encoding="Windows-1251" ?>
<First xmlns="urn:qwe:rty:DEF:version1">
  <Second>
    <Third>
      <Фамилия>Петров</Фамилия>
      <Имя>Петр</Имя>
    </Third>
  </Second>
</First>') myxml
    from dual)

SELECT t.last_name, t.name
  FROM xmlData1 x,
       xmltable(xmlnamespaces(DEFAULT 'urn:qwe:rty:ABC:version1'),
                '/First/Second/Third' PASSING x.myxml 
                COLUMNS 
                 last_name  VARCHAR2(255) path 'Фамилия',
                      NAME  VARCHAR2(255) path 'Имя') t
...
Рейтинг: 0 / 0
11.12.2019, 12:34
    #39901172
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
Vlad001,

а игнорировать namespace можно ?
...
Рейтинг: 0 / 0
11.12.2019, 12:35
    #39901174
Vlad001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
123йй,

Можно, но как это сделать? Если его не указывать, вообще ничего не возвращается

XML поменять возможности нет
...
Рейтинг: 0 / 0
11.12.2019, 12:39
    #39901178
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
Vlad001,
Код: plsql
1.
2.
3.
xmltable(--xmlnamespaces(DEFAULT 'urn:qwe:rty:ABC:version1'),
                '/*:First/*:Second/*:Third' PASSING x.myxml COLUMNS 
                 last_name  VARCHAR2(255) path '*:Фамилия
...
Рейтинг: 0 / 0
11.12.2019, 12:44
    #39901182
Zloxa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
Vlad001,

Vlad001получаю ORA-02000 missing ) keyword

Увы "string" это не "expr"

Vlad001Очень хочется
Динамика?
deprecated XMLSequence+Extract?
XMLTransform?
Может как-то через XQuery_string можно будет отжаться?

Если что-то придумаете, расскажите плиз, тоже интересно.
...
Рейтинг: 0 / 0
11.12.2019, 14:32
    #39901262
yvprod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
del
...
Рейтинг: 0 / 0
11.12.2019, 14:33
    #39901264
Vlad001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
123йй,
спасибо большое, так получилось!
...
Рейтинг: 0 / 0
11.12.2019, 14:37
    #39901267
Vlad001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
yvprod,

тут все-таки интерес был одним запросом получить результат, т.к. это процедура будет в которую XML приходит
...
Рейтинг: 0 / 0
11.12.2019, 14:39
    #39901269
yvprod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
Vlad001,

поторопился, удалил

namespace можно целиком через переменную подставить, с конкатенацией будут проблемы
...
Рейтинг: 0 / 0
11.12.2019, 14:55
    #39901283
Vlad001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
yvprod
Vlad001,

поторопился, удалил

namespace можно целиком через переменную подставить, с конкатенацией будут проблемы


А как через переменную, покажите пожалуйста?
...
Рейтинг: 0 / 0
11.12.2019, 15:42
    #39901319
yvprod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
Vlad001,

Код: plsql
1.
2.
3.
4.
5.
  namespace varchar2(40) := 'xmlns="urn:qwe:rty:ABC:version1"';
begin
  -- Test statements here
  dbms_output.put_line(xml.extract('/First/Second/Third/Имя/text()', namespace).getStringVal());
end;
...
Рейтинг: 0 / 0
11.12.2019, 16:09
    #39901340
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
yvprod
Vlad001,

поторопился, удалил

namespace можно целиком через переменную подставить, с конкатенацией будут проблемы


Код: 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.
with t as (
            select  xmltype('<ENVELOPE xmlns="urn:qwe:rty:ABC:version1"><ITEM rowNumber="1">1</ITEM></ENVELOPE>') x,
                    'ABC' default_namespace
               from dual
           union all
            select  xmltype('<ENVELOPE xmlns="urn:qwe:rty:DEF:version1"><ITEM rowNumber="1">2</ITEM></ENVELOPE>') x,
                    'DEF' default_namespace
               from dual
          )
select  item,
        default_namespace
  from  t,
        xmltable(
                 concat(concat('declare default element namespace "urn:qwe:rty:',default_namespace),':version1"; (: :)
                 $x/ENVELOPE/ITEM')
                 passing x as "x"
                 columns
                   item number path '.'
                )
/

      ITEM DEF
---------- ---
         1 ABC
         2 DEF

SQL> 



SY.
...
Рейтинг: 0 / 0
11.12.2019, 16:33
    #39901357
yvprod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML
SY,

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


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