【问题标题】:Load xml using XDocument.Load error "root element is missing" from stream从流中使用 XDocument.Load 错误“缺少根元素”加载 xml
【发布时间】:2023-03-05 11:55:01
【问题描述】:

我在使用 XDocument.Load 时遇到问题,因为有时没有错误,有时已经出现错误,同样的错误“缺少根元素”我已经尝试使用 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>

【问题讨论】:

  • XML 长什么样子?
  • @L-Three,已更新,我认为 xml 没有问题,因为有时它不会出错。有时会出现同样的错误
  • 为什么不使用 XDocument.Load(filePath) 代替?
  • @cheol.lui:实际上是示例 XML,还是只是一个彻底简化的版本?那个确切的文件是否以同样的方式失败?
  • @L-Three,我已经尝试过了,但它会说无法访问该文件,因为它正在被另一个进程使用

标签: c# stream linq-to-xml


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2019-05-24
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多