Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Работа с колонкой таблицы xmltype / 24 сообщений из 24, страница 1 из 1
11.04.2018, 17:39
    #39628636
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Добрый день. Возможно кто-то сталкивался с этим:
Код: plsql
1.
2.
3.
create table xxx (yyy xmltype null);
Insert into xxx (yyy)
values (xmltype('<a><t>  </t></a>'));


далее, делая select получаю xml совсем другой:
Код: xml
1.
<a><t/></a>


кто нибудь подскажет, почему так происходит?
...
Рейтинг: 0 / 0
11.04.2018, 17:41
    #39628638
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Забыл написать: oracle версии 11 и выше
...
Рейтинг: 0 / 0
11.04.2018, 17:56
    #39628648
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplusпочему так происходит?Канонизация.
Whitespace-ы в XML - незначащие.
...
Рейтинг: 0 / 0
11.04.2018, 18:19
    #39628659
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
ElicBaltikaplusпочему так происходит?Канонизация.
Whitespace-ы в XML - незначащие.

а вы могли бы прислать ссылку на w3.org где это описывается? К примеру в xsd я могу описать тег как стоковый и передавать в нем пробел. И везде это будет нлрмально восприниматься. Даже после xslt пробел не пропадет. Более того, я могу описать eNumerator с знаяением пробела и это тоже везде пройдет по синтаксису. Каким образом в этом случае мне установить знаяение тега пробел, из списка enumerator?
...
Рейтинг: 0 / 0
11.04.2018, 18:20
    #39628660
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplus,
можно было и таблицу не делать:
Код: plsql
1.
2.
3.
4.
select xmltype('<a><t>  </t></a>') from dual
<a>
  <t/>
</a>
...
Рейтинг: 0 / 0
11.04.2018, 18:23
    #39628662
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
XMLerBaltikaplus,
можно было и таблицу не делать:
Код: plsql
1.
2.
3.
4.
select xmltype('<a><t>  </t></a>') from dual
<a>
  <t/>
</a>


на моей версии oracle пробелы пропадают только после insert в таблицу
...
Рейтинг: 0 / 0
11.04.2018, 18:27
    #39628666
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplusа вы могли бы прислать ссылку на w3.org где это описывается?Прислать не могу.
https://www.w3.org/TR/xml/#sec-white-space
...
Рейтинг: 0 / 0
11.04.2018, 18:30
    #39628670
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplus Каким образом в этом случае мне установить знаяение тега пробел?

Код: plsql
1.
2.
3.
4.
5.
6.
<a>
  <t xml:space="preserve">  </t>
</a>
<a>
  <t xml:space="preserve">  </t>
</a>
...
Рейтинг: 0 / 0
11.04.2018, 18:32
    #39628672
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
XMLer,
Опечатался, д.б.
Код: plsql
1.
2.
3.
4.
select xmltype('<a><t xml:space ="preserve" >  </t></a>') from dual
<a>
  <t xml:space="preserve">  </t>
</a>
...
Рейтинг: 0 / 0
11.04.2018, 18:33
    #39628674
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
ElicBaltikaplusа вы могли бы прислать ссылку на w3.org где это описывается?Прислать не могу.
https://www.w3.org/TR/xml/#sec-white-space
Английский конечно мне не родной язык :-) но вроде как там речь идет о пробелах между тегами, а не в их значении...
...
Рейтинг: 0 / 0
11.04.2018, 18:47
    #39628682
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplusно вроде как там речь идет о пробелах между тегами
такой проблемы для xml нет в принципе, сериализация рулит
...
Рейтинг: 0 / 0
11.04.2018, 18:50
    #39628683
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplusно вроде как там речь идет о пробелах между тегами, а не в их значении...Тебе показалось.
...
Рейтинг: 0 / 0
11.04.2018, 18:54
    #39628685
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
XMLer<t xml:space="preserve"> </t>результат экстракта зависит от параметров сессии, формата хранения, и функции этого экстракта. Лучше использовать , хотя оно тоже может исказиться после двойного преобразования.
...
Рейтинг: 0 / 0
11.04.2018, 18:55
    #39628687
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
-2-Лучше использовать
Код: sql
1.
&#32;
...
Рейтинг: 0 / 0
11.04.2018, 18:55
    #39628688
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplusно вроде как там речь идет о пробелах между тегами
Код: plsql
1.
2.
3.
4.
select xmltype('<a><t xml:space ="preserve" >  </t></a>').getclobval(2,10) from dual
<a>
          <t xml:space="preserve">  </t>
</a>


Код: plsql
1.
2.
3.
4.
select xmltype('<a><t xml:space ="preserve" >  </t></a>').getclobval(1,1) from dual
<a>
 <t xml:space="preserve">  </t>
</a>
...
Рейтинг: 0 / 0
11.04.2018, 19:01
    #39628694
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Тогда почему такое поведение не характерно везде:

Код: plsql
1.
2.
3.
insert into xxx (yyy)
select xmlelement("a",xmlelement("b", '  '))
from dual


если выполнить запрос без insert, то будет видно, что пробелы есть, но после insert пропадают
...
Рейтинг: 0 / 0
11.04.2018, 19:08
    #39628697
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
-2--2-Лучше использовать
Код: sql
1.
&#32;



Вы продаете или покупаете? :)

Во-первых, это был демонстрационный пример, показывающий как управлять XML процессором. Oracle постольку-поскольку.
Во-вторых, лучше-хуже штука субьективная. По моему скромному мнению источнику, формирующему XML, виднее что он передает.

Код: plsql
1.
2.
3.
4.
<a><t xml:space ="default">  </t></a>
<a>
  <t xml:space="default"/>
</a>
...
Рейтинг: 0 / 0
11.04.2018, 19:10
    #39628702
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
-2-XMLer<t xml:space="preserve"> </t>результат экстракта зависит от параметров сессии, формата хранения, и функции этого экстракта. Лучше использовать , хотя оно тоже может исказиться после двойного преобразования.
Поясни, пожалуйста, что ты имеешь в виду?
...
Рейтинг: 0 / 0
11.04.2018, 19:17
    #39628705
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
BaltikaplusТогда почему такое поведение не характерно везде:

Код: plsql
1.
2.
3.
insert into xxx (yyy)
select xmlelement("a",xmlelement("b", '  '))
from dual


если выполнить запрос без insert, то будет видно, что пробелы есть, но после insert пропадают

Потому что сказанное выше относилось к XML процессору. По определению www3 это софт, позволяющий ЧИТАТЬ XML
...
Рейтинг: 0 / 0
11.04.2018, 19:28
    #39628706
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
XMLerBaltikaplusТогда почему такое поведение не характерно везде:

Код: plsql
1.
2.
3.
insert into xxx (yyy)
select xmlelement("a",xmlelement("b", '  '))
from dual


если выполнить запрос без insert, то будет видно, что пробелы есть, но после insert пропадают

Потому что сказанное выше относилось к XML процессору. По определению www3 это софт, позволяющий ЧИТАТЬ XML

не очень понятно, чем чтение xml, сформированного в запросе, отличается от чтения этого же xml после записи в таблицу?
...
Рейтинг: 0 / 0
11.04.2018, 19:29
    #39628708
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplusесли выполнить запрос без insert, то будет видно, что пробелы есть, но после insert пропадают
так и должно быть:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as
(select xmlelement("a",xmlelement("b", '  ')).getclobval() x  from dual)
select x,  xmltype(x) 
from t
<a><b>  </b>
<a>
  <b/>
</a>


Процессор отработал по дефолтным правилам. Хочешь их переоперделить - сделай это при формировании xml документа
...
Рейтинг: 0 / 0
11.04.2018, 19:32
    #39628709
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Baltikaplusне очень понятно, чем чтение xml, сформированного в запросе, отличается от чтения этого же xml после записи в таблицу?
Ничем не отличается, это ты почему то решил что insert в таблицу на что то влияет
...
Рейтинг: 0 / 0
11.04.2018, 20:29
    #39628717
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
XMLer-2-пропущено...
результат экстракта зависит от параметров сессии, формата хранения, и функции этого экстракта. Лучше использовать , хотя оно тоже может исказиться после двойного преобразования.
Поясни, пожалуйста, что ты имеешь в виду?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create table t(
x1 xmltype,
x2 xmltype)
xmltype x1 store as clob
xmltype x2 store as binary xml;

insert into t values (xmltype('<a>  </a>'), xmltype('<a>  </a>'));
insert into t values (xmltype('<a>&#32; </a>'), xmltype('<a>&#32; </a>'));
insert into t values (xmltype('<a xml:space="preserve">  </a>'), xmltype('<a xml:space="preserve">  </a>'));
commit;

select xmlserialize(document t.x1 as varchar2(40)) x1, xmlserialize(document t.x2 as varchar2(40)) x2, dump(xt1.".") d1, dump(xt2.".") d2
from t, xmltable('/a' passing t.x1 columns "." varchar2(20)) xt1, xmltable('/a' passing t.x2 columns "." varchar2(20)) xt2;

X1                            X2                             D1                 D2
----------------------------- ------------------------------ ------------------ ---------------
<a>  </a>                     <a/>                           Typ=1 Len=2: 32,32 NULL
<a>&#32; </a>	              <a>  </a>                      Typ=1 Len=2: 32,32 Typ=1 Len=2: 32,32
<a xml:space="preserve"> </a> <a xml:space="preserve">  </a> Typ=1 Len=2: 32,32 NULL

drop table t;

"Нехранение" тоже может быть двух типов - из строки и генерация с помощью xmlelement и др. На работу с xml также влияет ассоциация с xml-схемой.
...
Рейтинг: 0 / 0
11.04.2018, 22:18
    #39628733
Baltikaplus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с колонкой таблицы xmltype
Господа, спасибо всем за помощь. Хотя я все равно не согласен, что поведение ORACLE в этой части - адекватное, но использование директивы помогло и является для меня приемлемым обходным путем.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Работа с колонкой таблицы xmltype / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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