Как получить следующий вывод, используя XPATH в SQL Sproc - PullRequest
0 голосов
/ 14 июля 2011

Предположим, что ввод xml

<Tasks>
 <Task Name="Add2">
   <Dependency Name="S1"/>
 </Task>
 <Task Name="Min2">
  <Dependency Name="Dev1"/>
  <Dependency Name="Extra"/>
  </Task>
<Tasks>

Я хочу получить результат как

Add2   S1
Min2   Dev1
Min2   Extra

Как этого добиться, используя Xpath в Sql Sproc

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Некоторые из ваших предыдущих вопросов были о SQL Server, так что ...

declare @xml xml = '
<Tasks>
 <Task Name="Add2">
   <Dependency Name="S1"/>
 </Task>
 <Task Name="Min2">
  <Dependency Name="Dev1"/>
  <Dependency Name="Extra"/>
  </Task>
</Tasks>'


select T1.N.value('@Name', 'varchar(max)') as TaskName,
       T2.N.value('@Name', 'varchar(max)') as DependencyName
from @xml.nodes('/Tasks/Task') as T1(N)
  cross apply T1.N.nodes('Dependency') as T2(N)
0 голосов
/ 14 июля 2011

Технически вам нужно дважды пройти путь с помощью xpath, потому что вы обращаетесь к разным узлам. Я дам вам способ сервера SQL:

declare @xml_content xml = '<Tasks>
 <Task Name="Add2">
   <Dependency Name="S1"/>
 </Task>
 <Task Name="Min2">
  <Dependency Name="Dev1"/>
  <Dependency Name="Extra"/>
  </Task>
<Tasks>'

with roots as (
select x.value('@Name','varchar(max)') task_name,x.query('.') deps
from @xml_content.nodes('Tasks/Task') a(x)
)

select r.task_name,x.value('@Name','varchar(max)') dependency_name
from roots r
cross apply roots.deps.nodes('/Task/Dependency') a(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...