如何解析xml序列化的列表?通过OPENXML存储在存储过程中

本文关键字:存储 OPENXML 存储过程 过程中 通过 xml 何解析 序列化 列表 | 更新日期: 2023-09-27 18:02:10

我正在序列化一个整数列表,如下所示:

List<int> Ids=new List<int>();
Ids.Add(3);
Ids.Add(98);
XmlSerializer xs = new XmlSerializer(typeof(List<int>));
MemoryStream ms = new MemoryStream();
xs.Serialize(ms,Ids);
string resultXML = UTF8Encoding.UTF8.GetString(ms.ToArray());

并将resultXML传递给存储过程;

xml (resultXML)的格式为:

<?xml version="1.0"?>
<ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<int>3</int>
</ArrayOfInt>

我试图在我的存储过程中解析这个,如下所示:

insert into Table(did,pid)
(SELECT 1, id
FROM       OPENXML (@idoc, '/ArrayOfInt/int',)
        WITH (id int
              ))

但是我没有得到值;id列始终为null:

            id
----------- -----------
1           NULL

我该如何解决这个问题?我可以更改任何SP/TSQL, xml和c#/。NET代码。

如何解析xml序列化的列表?通过OPENXML存储在存储过程中

我想你只是少了一个.:

SELECT 1, id
FROM OPENXML (@idoc, '/ArrayOfInt/int')
WITH (id int '.')
与结果:

            id
----------- -----------
1           3
(1 row(s) affected)

(添加额外的<int>42</int>等值会导致额外的行等,如您所料)