2013-07-24 41 views
2

我需要能够用一个文件来做到这一点,我不一定知道元素名称是什么,或者他们有多少孩子将有(即:dataTable将有多少列)。然而,它的格式应该是:将XML读入一个DataTable - System.Xml.XmlException:根元素缺失

<Items> 
    <Item> 
     <Price>25</Price> 
     <Name>Basketball</Name> 
    </Item> 
    <Item> 
     <Price>29</Price> 
     <Name>Football</Name> 
    </Item> 
</Items> 

我已经试过这样:

DataSet ds = new DataSet(); 
ds.ReadXml(file.PostedFile.InputStream, XmlReadMode.InferSchema); 

这:

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

但我不断收到“System.Xml.XmlException:根元素缺失。“

+0

从您的示例x​​ml创建'DataSet'没有任何问题(实际上,您缺少关闭价格标签,但我认为是它的错字) –

+1

要解决问题,请尝试将文件读入字符串并查看会发生什么in:'string troubleshoot = new StreamReader(file.PostedFile.InputStream).ReadAllText();' –

+1

@Alfie - '<?xml version =“1.0”encoding =“ISO-8859-1”?>不是根元件。该结构被称为'XML声明'。在上面的示例中,“”元素是根元素。 – pmartin

回答

1

我遇到的问题是输入流是空的。我流复制到一个MemoryStream更早:

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

在XML文档的情况下,这是没有必要的(它被用于Excel文件),所以我只是做这如果上传的文件是XLS或xlsx。