簡體   English   中英

如何在 SQL Sproc 中使用 XPATH 獲取以下 output

[英]How to Get the following output using XPATH in SQL Sproc

假設 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

如何在 Sql Sproc 中使用 Xpath 實現此目的

您之前的一些問題是關於 SQL 服務器所以....

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)

從技術上講,您需要使用 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM