使用XDocument.Load从流中加载错误“root element is missing”

时间:2013-03-27 09:07:17

标签: c# stream linq-to-xml

我在使用XDocument.Load时出现问题,因为有时候没有错误,有时候已经出现错误,同样的错误“缺少root元素”我已经尝试过使用seek和position仍然会出现同样的错误。

任何想法如何解决此问题?感谢

到目前为止,这是我的源代码:

using (var stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            stream.Seek(0, System.IO.SeekOrigin.Begin);
            //stream.Position = 0;
            var request = XDocument.Load(stream);
            var get_command = from r in request.Descendants("Transaction")
                              select new
                              {
                                  Type = r.Element("Type").Value
                              };

            foreach (var c in get_command)
            {
                type = c.Type;
            }
        }

示例XML

<?xml version="1.0" encoding="utf-8"?>
<Request>
  <Transaction>
    <Type>gc</Type>
  </Transaction>
</Request>

1 个答案:

答案 0 :(得分:1)

我的猜测是你的样本过度简化了,你的Xml看起来更像是这个

<?xml version="1.0" encoding="utf-8"?>
<Request>
  <Transaction>
    <Type>gc</Type>
  </Transaction>
</Request>
<Request>
  <Transaction>
    <Type>gc</Type>
  </Transaction>
</Request>

这可以解释你的错误,因为没有根元素。你需要像这样做

<?xml version="1.0" encoding="utf-8"?>
<Requests>
  <Request>
    <Transaction>
      <Type>gc</Type>
    </Transaction>
  </Request>
  <Request>
    <Transaction>
      <Type>gc</Type>
    </Transaction>
  </Request>
</Requests>