<employee id="12"> <name>Milton Waddams</name> <title>Accountant</title> <notes> <note>No record of him being employed here</note> <note>We fixed payroll glitch with this employee</note> </notes> <assignedAssets> <asset name="swingarm stapler"> <note>Bill Lumbergh wants this reassigned</note> </asset> <asset name="calculator" /> <asset name="telephone" /> </assignedAssets> </employee>
SELECT id, info.query(' for $node in /descendant::node()[local-name() != ""] return <node> <namespace>{ namespace-uri($node) }</namespace> <localname>{ local-name($node) }</localname> <parent>{ local-name($node/..) }</parent> </node>') AS nodes FROM sample
<node> <namespace /> <localname>employee</localname> <parent /> </node> <node> <namespace /> <localname>name</localname> <parent>employee</parent> </node> <node> <namespace /> <localname>title</localname> <parent>employee</parent> </node> <node> <namespace /> <localname>notes</localname> <parent>employee</parent> </node> <node> <namespace /> <localname>note</localname> <parent>notes</parent> </node> <node> <namespace /> <localname>note</localname> <parent>notes</parent> </node> <node> <namespace /> <localname>assignedAssets</localname> <parent>employee</parent> </node> <node> <namespace /> <localname>asset</localname> <parent>assignedAssets</parent> </node> <node> <namespace /> <localname>note</localname> <parent>asset</parent> </node> <node> <namespace /> <localname>asset</localname> <parent>assignedAssets</parent> </node> <node> <namespace /> <localname>asset</localname> <parent>assignedAssets</parent> </node>
SELECT DISTINCT q1.id, T.n.value('namespace[1]', 'varchar(100)') AS Namespace, T.n.value('localname[1]', 'varchar(100)') AS Localname, T.n.value('parent[1]', 'VARCHAR(100)') AS parent FROM ( SELECT id, info.query(' for $node in /descendant::node()[local-name() != ""] return <node> <namespace>{ namespace-uri($node) }</namespace> <localname>{ local-name($node) }</localname> <parent>{ local-name($node/..) }</parent> </node>') AS nodes FROM sample ) q1 CROSS APPLY q1.nodes.nodes('/node') AS T ( n )
ID Namespace Localname Parent 1 asset assignedAssets 1 assignedAssets employee 1 employee 1 name employee 1 note asset 1 note notes 1 notes employee 1 title employee