2010-07-05 3 views
14

Если у меня есть:Получение имени элемента XML с помощью T-SQL

<quotes> 
    <quote> 
    <name>john</name> 
    <content>something or other</content> 
    </quote> 
    <quote> 
    <name>mary</name> 
    <content>random stuff</content> 
    </quote> 
</quotes> 

Как получить список из «имя» имена элементов и «содержание», используя T-SQL?

Лучшее, что я получил до сих пор:

declare @xml xml 
set @xml = ... 
select r.value('quotes/name()[1]', 'nvarchar(20)' as ElementName 
from @xml.nodes('/quotes') as records(r) 

Но, конечно, я не могу получить эту работу.

ответ

25

На самом деле, извините, лучше у меня есть:

select distinct r.value('fn:local-name(.)', 'nvarchar(50)') as t 
FROM 
    @xml.nodes('//quotes/*/*') AS records(r) 

Guess Я ответил на мой собственный вопрос ...

+0

FYI, решение пришло от спотыкания по этому сообщению: http://stackoverflow.com/questions/2266132/how-can-i-get-a-list-of-element-names-from-an-xml-value-in -sql-server –

+0

Ваш ответ прекрасен. Вы также можете просмотреть этот столбец для некоторой полезной XML-гимнастики: http://beyondrelational.com/blogs/jacob/archive/2010/05/30/select-from-xml.aspx –

4
DECLARE @xml as xml 
SET @xml = '<Address><Home>LINE1</Home></Address>' 

SELECT Nodes.Name.query('local-name(.)') FROM @xml.nodes('//*') As Nodes(Name) 

Это даст список всех элементов

Смежные вопросы