2013-07-24 67 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。