2010-04-19 62 views
1

我想讀取一個數據集作爲XML並將其加載到XML文檔。數據集 - > XML文檔 - 將數據集加載到XML文檔 - C#.net

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument(); 

using (MemoryStream ms = new MemoryStream()) 
{ 
    //XmlWriterSettings xmlWSettings = new XmlWriterSettings(); 

    //xmlWSettings.ConformanceLevel = ConformanceLevel.Auto; 
    using (XmlWriter xmlW = XmlWriter.Create(ms)) 
    { 
     xmlW.WriteStartDocument(); 
     dsContract.WriteXmlSchema(xmlW); 
     xmlW.WriteEndDocument(); 
     xmlW.Close(); 
     using (XmlReader xmlR = XmlReader.Create(ms)) 
     { 
     contractHistoryXMLSchemaDoc.Load(xmlR); 
     } 
    } 
} 

但是我收到錯誤 - 「根元件丟失」。

任何想法?

更新

當我做xmlR.ReadInnerXML()是空的。有誰知道爲什麼?

NLV

+3

你的XML文檔是什麼樣的? – Rippo 2010-04-19 11:49:31

+0

對不起,我沒有得到你。我需要將該數據集的xml導入到一個xml文檔中。 – NLV 2010-04-19 11:56:49

回答

4

有關原始代碼有幾件事情:

  • 你並不需要調用write開始和結束文件的方法:DataSet.WriteXmlSchema產生一個完整的,結構良好的XSD。
  • 編寫架構之後,流位於其結尾處,因此當您撥打XmlDocument.Load時,XmlReader不會讀取任何內容。

所以最主要的是你需要使用Seek來重置MemoryStream的位置。你也可以簡化整個方法:你不需要XmlReader或作家。以下適用於我:

XmlDocument xd = new XmlDocument(); 
using(MemoryStream ms = new MemoryStream()) 
{ 
    dsContract.WriteXmlSchema(ms); 

    // Reset the position to the start of the stream 
    ms.Seek(0, SeekOrigin.Begin); 
    xd.Load(ms); 
} 
+0

我想在單獨的XML文檔中使用數據集的模式。 – NLV 2010-04-19 12:01:33

0

您真正需要做的就是調用contractHistoryXMLSchemaDoc.Save(ms)。這將把xml放入MemoryStream中。

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument(); 

using (MemoryStream ms = new MemoryStream()) 
{ 
    contractHistoryXMLSchemaDoc.Save(ms); 
    ms.Flush(); 
} 
+0

我認爲我對這個問題的標題讓你感到困惑。我有數據集。我想把它加載到一個XML文檔。 – NLV 2010-04-19 12:19:32

1
XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument(); 

using (MemoryStream ms = new MemoryStream()) 
{ 
    dsContract.WriteXml(ms); 
    ms.Seek(0, SeekOrigin.Begin); 
    using(XmlReader xmlR = XmlReader.Create(ms)) 
    { 
     contractHistoryXMLSchemaDoc.Load(xmlR); 
    } 

} 
0

在這裏你去。 如果根據變量的命名約定(不是所問的問題看起來會發生變化......),則需要將數據集的XML scema加載到您用schema命名的XML文檔中,下面是將數據集的模式加載到XMLDocument中的代碼。

我想在單獨的XML文檔中的數據集的模式。 - NLV 4月19日'10在12:01

答:

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument(); 
using (MemoryStream ms = new MemoryStream()) 
{ 
    dsContract.WriteXmlSchema(ms); 
    ms.Seek(0, SeekOrigin.Begin); 
    contractHistoryXMLSchemaDoc.Load(ms); 
} 

如果你正在尋找如何將數據集表的數據加載到XML文檔(注意我已從XMLDocument變量去除字架構名)

你的問題:

對不起,我不給你。我需要將該數據集的xml導入到一個xml文檔中。 - NLV 4月19日'10在11:56

答:

XmlDocument contractHistoryXMLDoc = new XmlDocument(); 
using (MemoryStream ms = new MemoryStream()) 
{ 
    dsContract.WriteXml(ms,XmlWriteMode.IgnoreSchema); 
    ms.Seek(0, SeekOrigin.Begin); 
    contractHistoryXMLDoc.Load(ms); 
} 

如果你想要的模式和數據在單獨的文檔集,代碼之上。 如果你只想要schema或者只是xml文檔中的數據,可以使用與你的問題相關的上述代碼。 如果您想在同一個XMLDocument中使用XML Schema和Data,請使用此代碼。

XmlDocument contractHistoryXMLDoc = new XmlDocument(); 
using (MemoryStream ms = new MemoryStream()) 
{ 
    dsContract.WriteXml(ms,XmlWriteMode.WriteSchema); 
    ms.Seek(0, SeekOrigin.Begin); 
    contractHistoryXMLDoc.Load(ms); 
} 

你的問題:

但我得到的錯誤 - 「根元素缺少」。 任何想法? 更新 當我做xmlR.ReadInnerXML()它是空的。有誰知道爲什麼? NLV

答:

有在路上你的代碼,你認爲這是工作的根本問題,這意味着它是不是真的創建XMLSchema的和XMLDATA(dsContract),這就是爲什麼你看到一個空XMLDocument。

它可能會幫助你完全解釋你想要的,然後不會用任何誤解的部分句子給每個人回覆,而你必須用更多的部分句子來回答。