【问题标题】:How to transform from SQL Server raw XML to C#?如何从 SQL Server 原始 XML 转换为 C#?
【发布时间】:2015-03-11 10:13:45
【问题描述】:

我有一个接收原始 XML 作为参数的 CLR 存储过程,例如:

SET @xml = (SELECT * FROM titles FOR XML RAW)

会给

<row id="1" description="Mr." />
<row id="2" description="Mrs." />

上面的@xml 被传递给一个通用的 CLR 存储过程,该过程又需要解析它接收到的数据。

有没有一种简单的方法可以将原始 XML 转换为 C# 中的列表?

【问题讨论】:

  • 它将包含任何描述的根节点还是仅包含单个行节点?
  • @YannickMeeus 这只是上面显示的原始 xml。我宁愿不转换成完整的 xml 以保持大小。
  • 您需要使用具有一致性类型片段的 XmlReader 或添加根节点并使用 XmlDocument,请参阅 stackoverflow.com/questions/18186225/…

标签: c# sql-server xml


【解决方案1】:

根据下面的 cmets 编辑。

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 节点的属性解析为匿名对象列表。您也可以创建一个类型化对象并以这种方式对其进行解析,但这实际上取决于您的要求。

【讨论】:

  • 我需要将 Xml 转换为 C# 中的列表。
  • 完全错过了-.-,等一下,我看看能不能举个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2016-07-01
  • 2011-06-01
相关资源
最近更新 更多