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

Откуда: glubinka
Сообщений: 4256
Есть такой рекорсет. В попытке распознать структуру хочется выташить имена полей.
Кроме такого велосипеда ничего на ум не приходит

DECLARE @xml XML =  
'
<access_account access_account_profile_name="admin_RIS2_YKF-16" id="16" access_username="admin" access_account_password="79a488203a462b33" access_account_default="0" access_account_createdate="2016-09-27T16:17:35.860" />
<access_account access_account_profile_name="adminAAA_RIS2_YKF-40" id="40" access_username="adminAAA" access_account_password="79a488203a462b33" access_account_default="0" access_account_createdate="2016-09-27T16:17:35.860" />
<access_account access_account_profile_name="adminZZZZ_RIS2_YKF-25" id="25" access_username="adminZZZZ" access_account_password="dcbf4783a01559e9" access_account_default="0" access_account_createdate="2016-09-27T16:17:35.860" />
'

declare @docType nvarchar(max) = (select CAST(@xml.query('(//access_account)[1]') AS nvarchar(max)))
set @docType = REPLACE(REPLACE(REPLACE(REPLACE(@docType, '<', ''), '>', ''), '/', ''), '"', '')

SELECT substring( cols, 0, CHARINDEX('=', cols )) as fldname FROM 
(
    SELECT DISTINCT cols FROM ( SELECT CAST('<A>'+ REPLACE(@docType,' ','</A><A>')+ '</A>' AS XML) AS xml_str    ) xml_tbl
        CROSS APPLY ( SELECT t.value('.', 'sysname') AS cols FROM xml_str.nodes('/A') AS x(t) ) lstTypes
)x WHERE CHARINDEX('=', cols ) > 0


Может есть команда в XPath который я просмотрел?
27 сен 16, 11:01    [19712263]     Ответить | Цитировать Сообщить модератору
 Re: список атрибутов в ноде  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
Так чуть короче, но все же ?

SELECT substring( cols, 0, CHARINDEX('=', cols )) as fldname FROM 
(
  SELECT DISTINCT cols FROM 
    ( SELECT CAST('<A>'+ REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(xdoc, '<', ''), '>', ''), '/', ''), '"', ''),' ','</A><A>')+ '</A>' AS XML) AS xml_str
        FROM (select CAST(@xml.query('(//access_account)[1]') AS nvarchar(max)) AS xdoc )x )z
        CROSS APPLY ( SELECT t.value('.', 'sysname') AS cols FROM xml_str.nodes('/A') AS x(t) ) lstTypes
  WHERE CHARINDEX('=', cols ) > 0
)z
27 сен 16, 11:21    [19712335]     Ответить | Цитировать Сообщить модератору
 Re: список атрибутов в ноде  [new]
invm
Member

Откуда: Москва
Сообщений: 9632
select
 t.n.value('local-name(.)', 'varchar(100)')
from
 @xml.nodes('/access_account[1]/@*') t(n);
27 сен 16, 11:36    [19712421]     Ответить | Цитировать Сообщить модератору
 Re: список атрибутов в ноде  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
Спасибо коллега.
28 сен 16, 03:39    [19716280]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить