TSQL XQuery 获取两个子节点
TSQL XQuery to obtain two child nodes
我正在处理 XML 数据并想要 return 两个子节点的值。我可以使用单个节点来完成这项工作,但不能使用 return 两个单独的列。如何将 xPath 和 xQuery 写入 return 两列?
DECLARE @x XML
Set @x = '
<MT_BoxTextCtrl>
<DataSpec>ShipID_3_1_1</DataSpec>
<Label>Mode</Label>
<Size>230,30</Size>
<Units />
<UserLoValue />
</MT_BoxTextCtrl>
<MT_BoxTextCtrl>
<DataSpec>ShipID_3_1_2</DataSpec>
<Label>Sub Mode</Label>
<Size>230,30</Size>
<Units />
<UserLoValue />
</MT_BoxTextCtrl>
<MT_AlarmCtrl>
<AlarmRngIsReversed>False</AlarmRngIsReversed>
<CustomQuery />
<DataSpec>ShipID_9_1_1</DataSpec>
<HiValue>1</HiValue>
<Label />
</MT_AlarmCtrl>
<MT_AlarmCtrl>
<AlarmRngIsReversed>False</AlarmRngIsReversed>
<CustomQuery />
<DataSpec>ShipID_9_1_5</DataSpec>
<HiValue>1</HiValue>
<Label>In 500M DP Zone</Label>
</MT_AlarmCtrl>'
Select T.c.value('.', 'varchar(30)') as 'DataSpec'
from @x.nodes('//DataSpec') T(c)
Select T.c.value('.', 'varchar(30)') as Label
from @x.nodes('//Label') T(c)
谢谢
试试这个:
SELECT
NodeType = XC.value('local-name(.)', 'varchar(25)'),
DataSpec = XC.value('(DataSpec)[1]', 'varchar(30)'),
Label = XC.value('(Label)[1]', 'varchar(30)')
FROM
@x.nodes('/*') XT(XC)
这基本上需要每个顶级节点和 returns 这些 XML 片段中的 "virtual" table。从那些 XML 片段中,我获取节点名称(相关 XML 节点的 "type")、DataSpec
和 Label
子元素(它们的文本值)。
我得到这样的输出:
我正在处理 XML 数据并想要 return 两个子节点的值。我可以使用单个节点来完成这项工作,但不能使用 return 两个单独的列。如何将 xPath 和 xQuery 写入 return 两列?
DECLARE @x XML
Set @x = '
<MT_BoxTextCtrl>
<DataSpec>ShipID_3_1_1</DataSpec>
<Label>Mode</Label>
<Size>230,30</Size>
<Units />
<UserLoValue />
</MT_BoxTextCtrl>
<MT_BoxTextCtrl>
<DataSpec>ShipID_3_1_2</DataSpec>
<Label>Sub Mode</Label>
<Size>230,30</Size>
<Units />
<UserLoValue />
</MT_BoxTextCtrl>
<MT_AlarmCtrl>
<AlarmRngIsReversed>False</AlarmRngIsReversed>
<CustomQuery />
<DataSpec>ShipID_9_1_1</DataSpec>
<HiValue>1</HiValue>
<Label />
</MT_AlarmCtrl>
<MT_AlarmCtrl>
<AlarmRngIsReversed>False</AlarmRngIsReversed>
<CustomQuery />
<DataSpec>ShipID_9_1_5</DataSpec>
<HiValue>1</HiValue>
<Label>In 500M DP Zone</Label>
</MT_AlarmCtrl>'
Select T.c.value('.', 'varchar(30)') as 'DataSpec'
from @x.nodes('//DataSpec') T(c)
Select T.c.value('.', 'varchar(30)') as Label
from @x.nodes('//Label') T(c)
谢谢
试试这个:
SELECT
NodeType = XC.value('local-name(.)', 'varchar(25)'),
DataSpec = XC.value('(DataSpec)[1]', 'varchar(30)'),
Label = XC.value('(Label)[1]', 'varchar(30)')
FROM
@x.nodes('/*') XT(XC)
这基本上需要每个顶级节点和 returns 这些 XML 片段中的 "virtual" table。从那些 XML 片段中,我获取节点名称(相关 XML 节点的 "type")、DataSpec
和 Label
子元素(它们的文本值)。
我得到这样的输出: