使用SQL Server解析XML文件,并将子节点部分作为XML

时间:2015-12-10 15:28:13

标签: sql-server xml xpath xml-parsing

我有一个如下所示的XML文件:

<NodeA Type="A" Date="2015-10-28">
  <NodeB Amount="0.00">
    <Items />
  </NodeB>
  <NodeB Amount="0.00">
    <Items>
      <Item code="2" val="50.00" />
      <Item code="8" val="50.00" />
    </Items>
  </NodeB>
</NodeA>

我正在尝试使用SQL Server和XPath将NodeA的子节点提取为XML。

基于上面的XML,我需要返回一个包含2行的表,包含以下字段:

Type (nvarchar) | Date (Date) | ChildNode (XML)
-----------------------------------------------
A                 2015-10-28    <NodeB Amount="0.00"><Items /></NodeB>
A                 2015-10-28    <NodeB Amount="0.00"><Items>...</NodeB>

我知道我可以使用C#来做到这一点,但有没有办法使用XPath做到这一点?我有一些成功,xPath从NodeA返回字段值,但似乎无法让NodeB显示为XML。

1 个答案:

答案 0 :(得分:1)

试试这个 -

DECLARE @xml AS XML

SET @xml = '<NodeA Type="A" Date="2015-10-28">
  <NodeB Amount="0.00">
    <Items />
  </NodeB>
  <NodeB Amount="0.00">
    <Items>
      <Item code="2" val="50.00" />
      <Item code="8" val="50.00" />
    </Items>
  </NodeB>
</NodeA>'

SELECT c.value('(/NodeA/@Type)[1]', 'varchar(50)') AS Type, 
    c.value('(/NodeA/@Date)[1]', 'varchar(50)') AS Date,
    c.query('.') AS ChildNodeXML 
FROM @xml.nodes('/NodeA/NodeB') as T(C)

<强>结果

Type   Date          ChildNodeXML
----   ------        ----------------------------------
A      2015-10-28   <NodeB Amount="0.00"><Items /></NodeB>
A      2015-10-28   <NodeB Amount="0.00"><Items><Item code="2" val="50.00" /><Item code="8" val="50.00" /></Items></NodeB>