Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 OPENXML  [new]
vah
Member

Откуда:
Сообщений: 2657
Скажите пожалуйста,

делаю select из XML
FROM OPENXML(@hDoc, 'Root/Row')

можно ли сделать что бы сервер не чувствовал регистр букв в 'Root/Row'?

сейчас, если в файле XML 'root/Row', то в данном случае читаться не будет...

Заранее благодарен.
14 дек 17, 10:54    [21032902]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
vah,
читали справочку?
https://docs.microsoft.com/en-us/sql/t-sql/functions/openxml-transact-sql


бесчувственный сервер
14 дек 17, 10:56    [21032911]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
vah
можно ли сделать что бы сервер не чувствовал регистр букв в 'Root/Row'?
Разве это не стандарт XML, то есть Root и root - это разные ноды?
14 дек 17, 11:08    [21032953]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1526
vah
делаю select из XML
FROM OPENXML(@hDoc, 'Root/Row')

можно ли сделать что бы сервер не чувствовал регистр букв в 'Root/Row'?

сейчас, если в файле XML 'root/Row', то в данном случае читаться не будет...
XML сам по себе регистрозависимый.
14 дек 17, 11:18    [21032975]     Ответить | Цитировать Сообщить модератору
 Re: OPENXML  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5954
XML, как уже выше писали, по стандарту регистрозависим, но можно
1): не использовать имена тэгов, а использовать только относительное расположение:
declare
  @x xml='
  <data>
    <Root><Row name="A"/></Root>
    <root><row name="B"/></root>
    <ROOT><ROW name="C"/></ROOT>
  </data>',
  @h int;
exec sp_xml_preparedocument @h out, @x;
select * from openxml(@h, '/*/*/*', 1) with(name varchar(1))
exec sp_xml_removedocument @h;

2) Обращаться к нодам по local-name c приведением регистра (которого отдельной функцией в XPath 1.0 нет):
declare
  @x xml='
  <data>
    <Root><Row name="A"/></Root>
    <root><row name="B"/></root>
    <ROOT><ROW name="C"/></ROOT>
  </data>',
  @h int;
exec sp_xml_preparedocument @h out, @x;
select * from openxml(@h,
  '/*/*[translate(local-name(.), "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")="ROOT"]/*[translate(local-name(.), "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")="ROW"]'
  , 1) with(name varchar(1))
exec sp_xml_removedocument @h;

3) Если имя с гуляющим регистром есть в colpattern, то не поможет ни первое, ни второе:
declare
  @x xml='
  <data>
    <Root><Row>A</Row></Root>
    <root><row>B</row></root>
    <ROOT><ROW>C</ROW></ROOT>
  </data>',
  @h int;
exec sp_xml_preparedocument @h out, @x;
select * from openxml(@h, '/*/*', 2) with([row] varchar(1))
exec sp_xml_removedocument @h;

P.S. Там XML на вход люди руками что ли пишут, что у него гуляет регистр?
14 дек 17, 12:16    [21033192]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить