我有一个如下所示的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。
答案 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>