Выберите узлы XML как XML в T-SQL - PullRequest
4 голосов
/ 07 июля 2010

Это кажется таким простым, но я должен что-то упустить ...

Учитывая этот SQL:

declare @xml XML
set @xml =
'<people>
  <person>
    <name>Matt</name>
    <surname>Smith</surname>
  <person>
  <person>
    <name>John</name>
    <surname>Doe</surname>
  <person>
</people>'

Как бы вы получили таблицу, содержащую:

people
----------------------------------------------------------------------
      <person>\n        <name>Matt</name>\n        <surname>Smith</surname>\n      <person>
      <person>\n        <name>John</name>\n        <surname>Doe</surname>\n      <person>

т.е.: захватить целые узлы как элементы nvarchar (NNN), а не только их имена, атрибуты или значения?

Я пытался использовать node (), text (), fn: node (), fn: text (), бла-бла и т. д. ... Нуффин, пока!

Ответы [ 2 ]

2 голосов
/ 07 июля 2010

Кроме того, если кому-то интересно, вот расширение запроса, которое возвращает только непосредственные дочерние узлы корневого узла в виде xml, если они сами имеют дочерние узлы:

SELECT
    pref.query('.') as XmlExtract
FROM  
    @xml.nodes('/*/*') AS extract(pref)
WHERE
    pref.value('./*[1]', 'nvarchar(10)') IS NOT NULL
2 голосов
/ 07 июля 2010

Крики, думаю, я снова ответил на свой вопрос ...

SELECT
    pref.query('.') as PersonSkills
FROM  
    @xml.nodes('/*/*') AS People(pref)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...