将 xml 分成更小的部分
Split xml into smaller pieces
我有一个 xml 变量。
DECLARE @xml xml = N'<Items Category="AAA">
<Item Id="1">A</Item>
<Item Id="2">B</Item>
<Item Id="3">C</Item>
<Item Id="4">D</Item>
<Item Id="5">E</Item>
<Item Id="6">F</Item>
<Item Id="7">G</Item>
<Item Id="8">H</Item>
<Item Id="9">I</Item>
</Items>'
你能帮我写一个查询把它分成几个部分吗?
<Items Category="AAA">
<Item Id="1">A</Item>
<Item Id="2">B</Item>
<Item Id="3">C</Item>
</Items>
<Items Category="AAA">
<Item Id="4">D</Item>
<Item Id="5">E</Item>
<Item Id="6">F</Item>
</Items>
<Items Category="AAA">
<Item Id="7">G</Item>
<Item Id="8">H</Item>
<Item Id="9">I</Item>
</Items>
我的意思是 XQuery,但欢迎任何其他想法。
通过 XQuery 执行此操作的方法 modify
:
DECLARE @xml xml = N'<Items Category="AAA">
<Item Id="1">A</Item>
<Item Id="2">B</Item>
<Item Id="3">C</Item>
<Item Id="4">D</Item>
<Item Id="5">E</Item>
<Item Id="6">F</Item>
<Item Id="7">G</Item>
<Item Id="8">H</Item>
<Item Id="9">I</Item>
</Items>';
DECLARE @temp TABLE (XmlData1 xml, XmlData2 xml, XmlData3 xml);
INSERT @temp VALUES (@xml, @xml, @xml);
UPDATE t
SET XmlData1.modify('delete /Items/Item[not(position() >= 1 and position() < 4)]'),
XmlData2.modify('delete /Items/Item[not(position() >= 4 and position() < 7)]'),
XmlData3.modify('delete /Items/Item[not(position() >= 7 and position() < 10)]')
FROM @temp t;
SELECT * FROM @temp;
通过 FLWOR 执行此操作的方法:
select @xml.query('
<Items Category="AAA">
{
for $item in /Items/Item[position() >= 1 and position() < 4]
return $item
}
</Items>');
您可以在 XPath 中自由更改拆分条件。
我有一个 xml 变量。
DECLARE @xml xml = N'<Items Category="AAA">
<Item Id="1">A</Item>
<Item Id="2">B</Item>
<Item Id="3">C</Item>
<Item Id="4">D</Item>
<Item Id="5">E</Item>
<Item Id="6">F</Item>
<Item Id="7">G</Item>
<Item Id="8">H</Item>
<Item Id="9">I</Item>
</Items>'
你能帮我写一个查询把它分成几个部分吗?
<Items Category="AAA">
<Item Id="1">A</Item>
<Item Id="2">B</Item>
<Item Id="3">C</Item>
</Items>
<Items Category="AAA">
<Item Id="4">D</Item>
<Item Id="5">E</Item>
<Item Id="6">F</Item>
</Items>
<Items Category="AAA">
<Item Id="7">G</Item>
<Item Id="8">H</Item>
<Item Id="9">I</Item>
</Items>
我的意思是 XQuery,但欢迎任何其他想法。
通过 XQuery 执行此操作的方法 modify
:
DECLARE @xml xml = N'<Items Category="AAA">
<Item Id="1">A</Item>
<Item Id="2">B</Item>
<Item Id="3">C</Item>
<Item Id="4">D</Item>
<Item Id="5">E</Item>
<Item Id="6">F</Item>
<Item Id="7">G</Item>
<Item Id="8">H</Item>
<Item Id="9">I</Item>
</Items>';
DECLARE @temp TABLE (XmlData1 xml, XmlData2 xml, XmlData3 xml);
INSERT @temp VALUES (@xml, @xml, @xml);
UPDATE t
SET XmlData1.modify('delete /Items/Item[not(position() >= 1 and position() < 4)]'),
XmlData2.modify('delete /Items/Item[not(position() >= 4 and position() < 7)]'),
XmlData3.modify('delete /Items/Item[not(position() >= 7 and position() < 10)]')
FROM @temp t;
SELECT * FROM @temp;
通过 FLWOR 执行此操作的方法:
select @xml.query('
<Items Category="AAA">
{
for $item in /Items/Item[position() >= 1 and position() < 4]
return $item
}
</Items>');
您可以在 XPath 中自由更改拆分条件。