我有一个CLR存储过程,它接收原始XML作为参数,例如:
SET @xml = (SELECT * FROM titles FOR XML RAW)
会给出
<row id="1" description="Mr." />
<row id="2" description="Mrs." />
上面的@xml
被传递给一个通用的CLR存储过程,而后者又需要解析它收到的数据。
有没有一种简单的方法可以将原始XML转换为C#中的列表?
答案 0 :(得分:0)
根据以下评论进行编辑。
var xml = XDocument.Parse(string.Format("<root>{0}</root>", @"<row id=""1"" description=""Mr."" /><row id=""2"" description=""Mrs."" />"));
var rows = from node in xml.Descendants("row")
select new
{
Id = node.Attribute("id").Value,
description = node.Attribute("description").Value
};
上面将首先将xml包装在强制root
中,它不需要被称为root,但XDocument需要有一个根节点,否则它会摇摆不定。
然后使用linq-to-XML,我们将每个row
节点的属性解析为匿名对象列表。您还可以创建一个类型化对象并以这种方式解析它,但这实际上取决于您的要求。