2010-07-05 7 views
14

Wenn ich habe:Abrufen von XML-Elementnamen mit T-SQL

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

Wie bekomme ich eine Liste der 'Name' Elementnamen und 'Inhalt' mit T-SQL?

Das Beste, was ich bisher bekommen habe ist:

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

Aber natürlich, ich nicht diese Arbeit bekommen können.

Antwort

25

Eigentlich, sorry, das Beste, was ich habe ist:

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

Ich glaube, ich meine eigene Frage beantwortet ...

+0

FYI, die Lösung kam von stolpern über diesen Beitrag: http://StackOverflow.com/Questions/2266132/How-Can-I-Get-Alist-of-Element-Name-From-an-Xml-Value-in -sql-server –

+0

Ihre Antwort ist in Ordnung. Sie können diese Spalte auch für einige nützliche XML-Gymnastik überprüfen: 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) 

Dies wird die Liste aller Elemente geben