【问题标题】:How to read large XML RAW from Linq to SQL?如何从 Linq 读取大型 XML RAW 到 SQL?
【发布时间】:2010-07-19 20:31:24
【问题描述】:

我对 Linq to SQL 和 Linq to XML 还很陌生,但我拼凑了一些代码,将存储过程中的 XML 结果放入 XElement。但是,它开始失败,显然现在 XML 数据变得越来越大(2K+)并且我的 .Parse 正在读取截断的 XML(XML 数据以两行返回)。在我开始使用 xmlReaders 和所有这些摸索杂草之前,也许我看错了,有更好的方法。

我的确切问题如下,但我也很好奇任何标准的 Linq 习语来做这类事情。


我得到的具体错误是

System.Xml.XmlException:意外 解析名称时文件结尾有 发生了。第 1 行,位置 2034。

我的 C# 代码是这样的

XDocument orders = new XDocument(from b in db.GetUserOrders(userid)
 select XElement.Parse(b.XML_F52E5B62_58B1_21e2_B105_00805A49AB12));

存储过程看起来像

select * from orders where userid = @userid order by tscreated
for xml raw('order'), ROOT('orders')

从存储过程返回的 XML 看起来像

<orders>
  <order OrderId="123" UserId="bob" tscreated="2010-07-16T16:46:46.173">
    <morexml>
      <element1>
        <element2>abc</element2>
        <!--more stuff-->
      </element1>
    </morexml>
  </order>
  <!--lots more orders-->
</orders>

【问题讨论】:

  • xml 结果有多大?到目前为止,一切看起来都很正常......
  • 可能非常大,即。几K。看起来xml在两行中返回,所以我可能需要某种阅读器或迭代器或其他东西,但在将某些东西混在一起之前,我很好奇这样做的“正确”方法是什么。谢谢。
  • 是的,您需要读取所有行并将它们连接起来。
  • 我遇到了几乎完全相同的问题。有没有机会解决这个问题,您可以发布解决方案吗?
  • @EthanTowne,我忘记了这一点,所以发布了我想出的答案。已经有一段时间了(4.5 年),所以我的记忆很模糊。

标签: c# linq linq-to-sql linq-to-xml


【解决方案1】:

我忘记用答案更新这个,但鉴于@EthanTowne 的评论,我现在在这段代码中挖掘了我正在做的事情:

var o = from ords in cfg.db.OsGetUserOrders(userid)
    select ords.XML_F52E5B62_58B1_21e2_B105_00805A49AB12;
StringBuilder sb = new StringBuilder();
sb.AppendFormat("<orders>{0}</orders>", string.Join("", o.ToArray()));
XElement xe = XElement.Parse(sb.ToString());

基本上,存储过程返回几个order 元素,这段代码将它们转换为一个数组,然后将它们连接成一个字符串。然后我将其解析为 XElement。可能有更好的方法,我对其他解决方案持开放态度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多