该文为上篇FOR XML EXPLICIT使用的详细过程。
declare @t table (
SendID nvarchar(50),
ChannelsID nvarchar(50) ,
DeliveryLoc nvarchar(50) ,
MsgNo nvarchar(50) ,
MsgDate datetime ,
Coin nvarchar(50) ,
Amt float,
Remark nvarchar(50) ,
ContactName nvarchar(50) ,
ContactTel nvarchar(50) ,
ContactAddress nvarchar(50),
ItemNo int ,
PartNo nvarchar(50) ,
Unit nvarchar(50) ,
Price float ,
Qty_BY Float ,
SubAmt_BY Float ,
DeliveryDate_BY datetime ,
ItemRemark_BY nvarchar(50)
)
insert @t select'','34010019','南京江宁镇宁桥北路','3410052400009808','2010-5-24 10:33:18','RMB','0','测试接口(南京仓)','刘拓','18602520723','南京江宁镇宁桥北路','1','01000188','台','1000.0000','6','0','2010-5-24 10:37:17','' union all
select'','34010019','南京江宁镇宁桥北路','3410052400009808','2010-5-24 10:33:18','RMB','0','测试接口(南京仓)','刘拓','18602520723','南京江宁镇宁桥北路','2','01000189','台','1000.0000','4','0','2010-5-24 10:37:17','' union all
select'','330A0000','无锡开锋路小吏巷','3410052400009811','2010-5-24 10:33:18','RMB','0','测试接口(无锡仓)','刘拓','18602520723','无锡开锋路小吏巷','1','01000188','台','1000.0000','3','0','2010-5-24 10:37:17','' union all
select'','330A0000','无锡开锋路小吏巷','3410052400009811','2010-5-24 10:33:18','RMB','0','测试接口(无锡仓)','刘拓','18602520723','无锡开锋路小吏巷','2','01000189','台','1000.0000','7','0','2010-5-24 10:37:17',''
;with SOMaster as(
select distinct SendID,
ChannelsID,
DeliveryLoc,
MsgNo,
MsgDate,
Coin,
Amt,
Remark,
ContactName,
ContactTel,
ContactAddress from @t)
/*以下的SOMaster都为引用该管用表达式*/
--下面按顺序来编写查询代码
--1,首先生成根节点
SELECT
1 AS Tag,
NULL AS Parent,
NULL AS 'SOMasters!1'
FOR XML EXPLICIT
/*
"Tag" 是一个强制列. 它告诉XML解析器元素的层次,代表最高节点。
"Parent" 同样也是一个强制列,必须存在. 代表的是当前节点的父节点。代码中
NULL表示没有父节点,也就是该层次为顶层。
"SOMasters!1" 此种形式代表的是根节点。
"SOMasters" 元素名称
"1" 代表的是指定层次结构的节点级别
*/
/*
输出:
<SOMasters/>
*/
--2,下面生成下一层节点,应该是SOMaster节点,这些数据来自SOMaster。
SELECT
1 AS Tag,
NULL AS Parent,
NULL AS 'SOMasters!1',
NULL AS 'SOMaster!2!SendID!ELEMENT',
NULL AS 'SOMaster!2!ChannelsID!ELEMENT',
NULL AS 'SOMaster!2!DeliveryLoc!ELEMENT',
NULL AS 'SOMaster!2!MsgNo!ELEMENT',
NULL AS 'SOMaster!2!MsgDate!ELEMENT',
NULL AS 'SOMaster!2!Coin!ELEMENT',
NULL AS 'SOMaster!2!Amt!ELEMENT',
NULL AS 'SOMaster!2!Remark!ELEMENT',
NULL AS 'SOMaster!2!ContactName!ELEMENT',
NULL AS 'SOMaster!2!ContactTel!ELEMENT',
NULL AS 'SOMaster!2!ContactAddress!ELEMENT'
UNION ALL
SELECT
2 AS Tag,
1 AS Parent,
NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
FROM
SOMaster
FOR XML EXPLICIT
/*
"Tag"
此次为代表的是第二层节点
"Parent"
1代表这些记录有一个"1"父节点. Parent值代表了TAG的父节点.
"SOMaster!2!ContactAddress!ELEMENT"
SOMaster:元素名称
2:代表节点的层次
ContactAddress:在指定的SOMaster元素中要构造的元素名称
ELEMENT:指定ContactAddress为构造元素
....
*/
/*
输出:
<SOMasters>
<SOMaster>
<SendID></SendID>
<ChannelsID>330A0000</ChannelsID>
<DeliveryLoc>无锡开锋路小吏巷</DeliveryLoc>
<MsgNo>3410052400009811</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(无锡仓)</Remark>
<ContactName>刘拓</ContactName>
<ContactTel>18602520723</ContactTel>
<ContactAddress>无锡开锋路小吏巷</ContactAddress>
</SOMaster>
<SOMaster>
<SendID></SendID>
<ChannelsID>34010019</ChannelsID>
<DeliveryLoc>南京江宁镇宁桥北路</DeliveryLoc>
<MsgNo>3410052400009808</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(南京仓)</Remark>
<ContactName>刘拓</ContactName>
<ContactTel>18602520723</ContactTel>
<ContactAddress>南京江宁镇宁桥北路</ContactAddress>
</SOMaster>
</SOMasters>
*/
---添加SODetails节点,查看XML我们发现每个SOMaster节点下都需要一个SODetails节点。
SELECT
1 AS Tag,
NULL AS Parent,
NULL AS 'SOMasters!1',
NULL AS 'SOMaster!2!SendID!ELEMENT',
NULL AS 'SOMaster!2!ChannelsID!ELEMENT',
NULL AS 'SOMaster!2!DeliveryLoc!ELEMENT',
NULL AS 'SOMaster!2!MsgNo!ELEMENT',
NULL AS 'SOMaster!2!MsgDate!ELEMENT',
NULL AS 'SOMaster!2!Coin!ELEMENT',
NULL AS 'SOMaster!2!Amt!ELEMENT',
NULL AS 'SOMaster!2!Remark!ELEMENT',
NULL AS 'SOMaster!2!ContactName!ELEMENT',
NULL AS 'SOMaster!2!ContactTel!ELEMENT',
NULL AS 'SOMaster!2!ContactAddress!ELEMENT',
NULL AS 'SODetails!3!ELEMENT'--SODetails
UNION ALL
SELECT
2 AS Tag,
1 AS Parent,
NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,NULL
FROM
SOMaster
UNION ALL
SELECT
3 AS Tag,
2 AS Parent,
NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
FROM
SOMaster
FOR XML EXPLICIT
/*
输出:
<SOMasters>
<SOMaster>
<SendID></SendID>
<ChannelsID>330A0000</ChannelsID>
<DeliveryLoc>无锡开锋路小吏巷</DeliveryLoc>
<MsgNo>3410052400009811</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(无锡仓)</Remark>
<ContactName>刘拓</ContactName>
<ContactTel>18602520723</ContactTel>
<ContactAddress>无锡开锋路小吏巷</ContactAddress>
</SOMaster>
<SOMaster>
<SendID></SendID>
<ChannelsID>34010019</ChannelsID>
<DeliveryLoc>南京江宁镇宁桥北路</DeliveryLoc>
<MsgNo>3410052400009808</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(南京仓)</Remark>
<ContactName>刘拓</ContactName>
<ContactTel>18602520723</ContactTel>
<ContactAddress>南京江宁镇宁桥北路</ContactAddress>
--注意下面个节点成为最后一个SOMaster的部分不是我们需要的格式。
<SODetails />
<SODetails />
</SOMaster>
</SOMasters>
*/
--下面我们看没有FOR XML EXPLICIT查询返回的结果集
SELECT
1 AS Tag,
NULL AS Parent,
NULL AS 'SOMasters!1',
NULL AS 'SOMaster!2!SendID!ELEMENT',
NULL AS 'SOMaster!2!ChannelsID!ELEMENT',
NULL AS 'SOMaster!2!DeliveryLoc!ELEMENT',
NULL AS 'SOMaster!2!MsgNo!ELEMENT',
NULL AS 'SOMaster!2!MsgDate!ELEMENT',
NULL AS 'SOMaster!2!Coin!ELEMENT',
NULL AS 'SOMaster!2!Amt!ELEMENT',
NULL AS 'SOMaster!2!Remark!ELEMENT',
NULL AS 'SOMaster!2!ContactName!ELEMENT',
NULL AS 'SOMaster!2!ContactTel!ELEMENT',
NULL AS 'SOMaster!2!ContactAddress!ELEMENT',
NULL AS 'SODetails!3!ELEMENT'--SODetails
UNION ALL
SELECT
2 AS Tag,
1 AS Parent,
NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,NULL
FROM
SOMaster
UNION ALL
SELECT
3 AS Tag,
2 AS Parent,
NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
FROM
SOMaster
/*
结果:
Tag Parent ... SODetails!3!ELEMENT
----------- -------- ------- --------------------
1 NULL ... NULL
2 1 ... NULL
2 1 ... NULL
3 2 ... NULL
3 2 ... NULL
(5 行受影响)
注意结果集的最后行,这就是为什么SODetails节点只是最后一个SOMaster节点的部分。
要形成我们期望的格式就要改变最后行的顺序
*/
--所以我们加入ChannelsID排序生成的行号来改变结果集的顺序。
SELECT
0 as sort,
1 AS Tag,
NULL AS Parent,
NULL AS 'SOMasters!1',
NULL AS 'SOMaster!2!SendID!ELEMENT',
NULL AS 'SOMaster!2!ChannelsID!ELEMENT',
NULL AS 'SOMaster!2!DeliveryLoc!ELEMENT',
NULL AS 'SOMaster!2!MsgNo!ELEMENT',
NULL AS 'SOMaster!2!MsgDate!ELEMENT',
NULL AS 'SOMaster!2!Coin!ELEMENT',
NULL AS 'SOMaster!2!Amt!ELEMENT',
NULL AS 'SOMaster!2!Remark!ELEMENT',
NULL AS 'SOMaster!2!ContactName!ELEMENT',
NULL AS 'SOMaster!2!ContactTel!ELEMENT',
NULL AS 'SOMaster!2!ContactAddress!ELEMENT',
NULL AS 'SODetails!3!ELEMENT'
UNION ALL
SELECT
ROW_NUMBER() over(order by ChannelsID)*100 as sort,
2 AS Tag,
1 AS Parent,
NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,NULL
FROM
SOMaster
UNION ALL
SELECT
ROW_NUMBER() over(order by ChannelsID)*100+1 as sort,
3 AS Tag,
2 AS Parent,
NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
FROM SOMaster
ORDER BY sort
/*
(4 行受影响)
sort Tag Parent ..... SODetails!3!ELEMENT
-------------------- --------- ---------- ------- --------------------
0 1 NULL ..... NULL
100 2 1 ..... NULL
101 3 2 ..... NULL
200 2 1 ..... NULL
201 3 2 ..... NULL
(5 行受影响)
注意,行即为之前的最后的行。前面我们排序用行号*100以达到需要的效果。
*/
/*
下面如果我们直接在上面的代码基础上加上FOR XML EXPLICIT查询的话会报错
因为当我们用FOR XML EXPLICIT查询时候所有列出去'Tag'和'Parent'之外都必
须是形如ElementName!TagNumber!AttributeName!Directive,所以我们需要一
个外部查询来去掉SORT列。
*/
SELECT Tag,
Parent,
[SOMasters!1],
[SOMaster!2!SendID!ELEMENT],
[SOMaster!2!ChannelsID!ELEMENT],
[SOMaster!2!DeliveryLoc!ELEMENT],
[SOMaster!2!MsgNo!ELEMENT],
[SOMaster!2!MsgDate!ELEMENT],
[SOMaster!2!Coin!ELEMENT],
[SOMaster!2!Amt!ELEMENT],
[SOMaster!2!Remark!ELEMENT],
[SOMaster!2!ContactName!ELEMENT],
[SOMaster!2!ContactTel!ELEMENT],
[SOMaster!2!ContactAddress!ELEMENT],
[SODetails!3!ELEMENT]
FROM (
SELECT
0 as sort,
1 AS Tag,
NULL AS Parent,
NULL AS 'SOMasters!1',
NULL AS 'SOMaster!2!SendID!ELEMENT',
NULL AS 'SOMaster!2!ChannelsID!ELEMENT',
NULL AS 'SOMaster!2!DeliveryLoc!ELEMENT',
NULL AS 'SOMaster!2!MsgNo!ELEMENT',
NULL AS 'SOMaster!2!MsgDate!ELEMENT',
NULL AS 'SOMaster!2!Coin!ELEMENT',
NULL AS 'SOMaster!2!Amt!ELEMENT',
NULL AS 'SOMaster!2!Remark!ELEMENT',
NULL AS 'SOMaster!2!ContactName!ELEMENT',
NULL AS 'SOMaster!2!ContactTel!ELEMENT',
NULL AS 'SOMaster!2!ContactAddress!ELEMENT',
NULL AS 'SODetails!3!ELEMENT'
UNION ALL
SELECT
ROW_NUMBER() over(order by ChannelsID)*100 as sort,
2 AS Tag,
1 AS Parent,
NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,NULL
FROM
SOMaster
UNION ALL
SELECT
ROW_NUMBER() over(order by ChannelsID)*100+1 as sort,
3 AS Tag,
2 AS Parent,
NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
FROM SOMaster
) A
ORDER BY sort
FOR XML EXPLICIT
/*
结果:
<SOMasters>
<SOMaster>
<SendID></SendID>
<ChannelsID>330A0000</ChannelsID>
<DeliveryLoc>无锡巷号</DeliveryLoc>
<MsgNo>3410052400009811</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(无锡仓)</Remark>
<ContactName>刘明</ContactName>
<ContactTel>13556239865</ContactTel>
<ContactAddress>无锡号</ContactAddress>
<SODetails />
</SOMaster>
<SOMaster>
<SendID></SendID>
<ChannelsID>34010019</ChannelsID>
<DeliveryLoc>南京北路号</DeliveryLoc>
<MsgNo>3410052400009808</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(南京仓)</Remark>
<ContactName>刘明</ContactName>
<ContactTel>13556239865</ContactTel>
<ContactAddress>南京北路号</ContactAddress>
<SODetails />
</SOMaster>
</SOMasters>
*/
/*
上面已经确定了节点的顺序,下面我们就在SODetails下添加SODetail节点.
同样需要注意他们的顺序.
*/
select Tag,
Parent,
[SOMasters!1], -- empty root element
[SOMaster!2!SendID!ELEMENT],
[SOMaster!2!ChannelsID!ELEMENT],
[SOMaster!2!DeliveryLoc!ELEMENT],
[SOMaster!2!MsgDate!ELEMENT],
[SOMaster!2!Coin!ELEMENT],
[SOMaster!2!Amt!ELEMENT],
[SOMaster!2!Remark!ELEMENT],
[SOMaster!2!ContactName!ELEMENT],
[SOMaster!2!ContactTel!ELEMENT],
[SOMaster!2!ContactAddress!ELEMENT],
[SODetails!3!ELEMENT],
[SODetail!4!ItemNo!ELEMENT],
[SODetail!4!PartNo!ELEMENT],
[SODetail!4!Unit!ELEMENT],
[SODetail!4!Qty_BY!ELEMENT],
[SODetail!4!SubAmt_BY!ELEMENT],
[SODetail!4!DeliveryDate_BY!ELEMENT],
[SODetail!4!ItemRemark_BY!ELEMENT]
FROM (
SELECT
0 as sort,
1 AS Tag,
NULL AS Parent,
NULL AS 'SOMasters!1', -- empty root element
NULL AS 'SOMaster!2!SendID!ELEMENT',
NULL AS 'SOMaster!2!ChannelsID!ELEMENT',
NULL AS 'SOMaster!2!DeliveryLoc!ELEMENT',
NULL AS 'SOMaster!2!MsgNo!ELEMENT',
NULL AS 'SOMaster!2!MsgDate!ELEMENT',
NULL AS 'SOMaster!2!Coin!ELEMENT',
NULL AS 'SOMaster!2!Amt!ELEMENT',
NULL AS 'SOMaster!2!Remark!ELEMENT',
NULL AS 'SOMaster!2!ContactName!ELEMENT',
NULL AS 'SOMaster!2!ContactTel!ELEMENT',
NULL AS 'SOMaster!2!ContactAddress!ELEMENT',
NULL AS 'SODetails!3!ELEMENT',
NULL AS 'SODetail!4!ItemNo!ELEMENT',
NULL AS 'SODetail!4!PartNo!ELEMENT',
NULL AS 'SODetail!4!Unit!ELEMENT',
NULL AS 'SODetail!4!Qty_BY!ELEMENT',
NULL AS 'SODetail!4!SubAmt_BY!ELEMENT',
NULL AS 'SODetail!4!DeliveryDate_BY!ELEMENT',
NULL AS 'SODetail!4!ItemRemark_BY!ELEMENT'
UNION ALL
SELECT
ROW_NUMBER() over(order by ChannelsID)*100 as sort,
2 AS Tag,
1 AS Parent,
NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
FROM
SOMaster
UNION ALL
SELECT
ROW_NUMBER() over(order by ChannelsID)*100+1 as sort,
3 AS Tag,
2 AS Parent,
NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
from SOMaster
UNION ALL
SELECT
dense_rank() over(order by ChannelsID)*100+2 as sort,
4 AS Tag
,3 AS Parent
, NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,null
,ItemNo
,PartNo
,Unit
,ltrim(Qty_BY)
,ltrim(SubAmt_BY)
,DeliveryDate_BY
,ItemRemark_BY
from @t
) a
order by sort ,'SODetail!4!ItemNo!ELEMENT',Parent
FOR XML EXPLICIT
/*
关于上面的排序,我们可以用更简单的办法"hide"指令.HIDE指令和Element一样都是
ElementName!TagNumber!AttributeName!Directive中Directive的一种.
hide指令可以使XML解析器在生成XML的时候忽略改列.
下面为方法二:
*/
SELECT
1 AS Tag,
NULL AS Parent,
0 as 'SOMasters!1!SORT!hide',
NULL AS 'SOMasters!1', -- empty root element
NULL AS 'SOMaster!2!SendID!ELEMENT',
NULL AS 'SOMaster!2!ChannelsID!ELEMENT',
NULL AS 'SOMaster!2!DeliveryLoc!ELEMENT',
NULL AS 'SOMaster!2!MsgNo!ELEMENT',
NULL AS 'SOMaster!2!MsgDate!ELEMENT',
NULL AS 'SOMaster!2!Coin!ELEMENT',
NULL AS 'SOMaster!2!Amt!ELEMENT',
NULL AS 'SOMaster!2!Remark!ELEMENT',
NULL AS 'SOMaster!2!ContactName!ELEMENT',
NULL AS 'SOMaster!2!ContactTel!ELEMENT',
NULL AS 'SOMaster!2!ContactAddress!ELEMENT',
NULL AS 'SODetails!3!ELEMENT',
NULL AS 'SODetail!4!ItemNo!ELEMENT',
NULL AS 'SODetail!4!PartNo!ELEMENT',
NULL AS 'SODetail!4!Unit!ELEMENT',
NULL AS 'SODetail!4!Qty_BY!ELEMENT',
NULL AS 'SODetail!4!SubAmt_BY!ELEMENT',
NULL AS 'SODetail!4!DeliveryDate_BY!ELEMENT',
NULL AS 'SODetail!4!ItemRemark_BY!ELEMENT'
UNION ALL
SELECT
2 AS Tag,
1 AS Parent,
ROW_NUMBER() over(order by ChannelsID)*100,
NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
FROM
SOMaster
UNION ALL
SELECT
3 AS Tag,
2 AS Parent,
ROW_NUMBER() over(order by ChannelsID)*100+1 ,
NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
from SOMaster
UNION ALL
SELECT
4 AS Tag,
3 AS Parent,
dense_rank() over(order by ChannelsID)*100+2
, NULL
,SendID
,ChannelsID
,DeliveryLoc
,MsgNo
,MsgDate
,Coin
,ltrim(Amt)
,Remark
,ContactName
,ContactTel
,ContactAddress
,null
,ItemNo
,PartNo
,Unit
,ltrim(Qty_BY)
,ltrim(SubAmt_BY)
,DeliveryDate_BY
,ItemRemark_BY
from @t
order by 'SOMasters!1!SORT!hide','SODetail!4!ItemNo!ELEMENT',Parent
FOR XML EXPLICIT
/*
<SOMasters>
<SOMaster>
<SendID></SendID>
<ChannelsID>330A0000</ChannelsID>
<DeliveryLoc>无锡巷号</DeliveryLoc>
<MsgNo>3410052400009811</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(无锡仓)</Remark>
<ContactName>刘明</ContactName>
<ContactTel>13556239865</ContactTel>
<ContactAddress>无锡号</ContactAddress>
<SODetails>
<SODetail>
<ItemNo>1</ItemNo>
<PartNo>01000188</PartNo>
<Unit>台</Unit>
<Qty_BY>3</Qty_BY>
<SubAmt_BY>0</SubAmt_BY>
<DeliveryDate_BY>2010-05-24T10:37:17</DeliveryDate_BY>
<ItemRemark_BY></ItemRemark_BY>
</SODetail>
<SODetail>
<ItemNo>2</ItemNo>
<PartNo>01000189</PartNo>
<Unit>台</Unit>
<Qty_BY>7</Qty_BY>
<SubAmt_BY>0</SubAmt_BY>
<DeliveryDate_BY>2010-05-24T10:37:17</DeliveryDate_BY>
<ItemRemark_BY></ItemRemark_BY>
</SODetail>
</SODetails>
</SOMaster>
<SOMaster>
<SendID></SendID>
<ChannelsID>34010019</ChannelsID>
<DeliveryLoc>南京北路号</DeliveryLoc>
<MsgNo>3410052400009808</MsgNo>
<MsgDate>2010-05-24T10:33:18</MsgDate>
<Coin>RMB</Coin>
<Amt>0</Amt>
<Remark>测试接口(南京仓)</Remark>
<ContactName>刘明</ContactName>
<ContactTel>13556239865</ContactTel>
<ContactAddress>南京北路号</ContactAddress>
<SODetails>
<SODetail>
<ItemNo>1</ItemNo>
<PartNo>01000188</PartNo>
<Unit>台</Unit>
<Qty_BY>6</Qty_BY>
<SubAmt_BY>0</SubAmt_BY>
<DeliveryDate_BY>2010-05-24T10:37:17</DeliveryDate_BY>
<ItemRemark_BY></ItemRemark_BY>
</SODetail>
<SODetail>
<ItemNo>2</ItemNo>
<PartNo>01000189</PartNo>
<Unit>台</Unit>
<Qty_BY>4</Qty_BY>
<SubAmt_BY>0</SubAmt_BY>
<DeliveryDate_BY>2010-05-24T10:37:17</DeliveryDate_BY>
<ItemRemark_BY></ItemRemark_BY>
</SODetail>
</SODetails>
</SOMaster>
</SOMasters>
*/