C# 正在将XML读入DataTable-System.XML.XmlException:缺少根元素

C# 正在将XML读入DataTable-System.XML.XmlException:缺少根元素,c#,asp.net,xml,C#,Asp.net,Xml,我需要能够在一个文件中做到这一点,在这个文件中,我不一定知道元素的名称,或者它们将有多少子元素(即:dataTable将有多少列)。但是,其格式应如下所示: <Items> <Item> <Price>25</Price> <Name>Basketball</Name> </Item> <Item> <Price>29</Pric

我需要能够在一个文件中做到这一点,在这个文件中,我不一定知道元素的名称,或者它们将有多少子元素(即:dataTable将有多少列)。但是,其格式应如下所示:

<Items>
   <Item>
      <Price>25</Price>
      <Name>Basketball</Name>
   </Item>
   <Item>
      <Price>29</Price>
      <Name>Football</Name>
   </Item>
</Items>
这是:

ds.Tables[0].ReadXml(file.PostedFile.InputStream);

但是我一直得到“System.Xml.xmleexception:Root元素丢失。”

我遇到的问题是输入流是空的。我之前正在将流复制到MemoryStream:

MemoryStream memStream = new MemoryStream();
using (Stream s = file.PostedFile.InputStream)
{
     s.CopyTo(memStream);
}

对于xml文档,这是不必要的(它用于excel),因此我只在上传的文件是xls或xlsx时才这样做。

从您的示例xml
数据集创建时没有任何问题(事实上,您缺少收盘价标签,但我认为它的打字错误)来进行故障排除,尝试将文件读入字符串并查看其中的内容:
string疑难解答=new StreamReader(file.PostedFile.InputStream).ReadAllText()
@Alfie-
不是根元素。这种结构称为“XML声明”。在上面的示例中,
元素是根元素。@maembe-您可能会遇到此错误,因为InputStream是空的。使用John的建议排除故障并确认您正在成功读取文件内容。@maembe:您应该将此作为您自己问题的答案。显示一个读入内存流的代码示例,以说明不应执行的操作。
MemoryStream memStream = new MemoryStream();
using (Stream s = file.PostedFile.InputStream)
{
     s.CopyTo(memStream);
}