数据集 – > XML文档 – 将数据集加载到XML文档中 – C#.Net

我正在尝试将数据集读取为xml并将其加载到XML文档中。

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); } } } 

但是我收到了错误 – “Root Element Missing”。

有任何想法吗?

更新

当我执行xmlR.ReadInnerXML()时它是空的。 有谁知道为什么?

NLV

关于原始代码的一些事情:

  • 您不需要调用write开始和结束文档方法: DataSet.WriteXmlSchema生成一个完整的,格式良好的xsd。
  • 在编写模式之后,流定位在它的末尾,因此当您调用XmlDocument.Load时, XmlReader没有任何内容可供读取。

所以主要的是你需要使用Seek重置MemoryStream的位置。 您还可以简化整个方法:您不需要XmlReader或writer。 以下为我工作:

 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); } 
 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); } } 

您真正需要做的就是调用contractHistoryXMLSchemaDoc.Save(ms)。 这将把xml放入MemoryStream。

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

干得好。 如果从变量的命名约定(不是你提出的问题,似乎改变了……),你需要将数据集的XML scema加载到用schema命名的XML文档中,下面是用于将数据集的架构加载到XMLDocument中的代码。

我想在单独的XML文档中使用数据集的模式。 – NLV 2010年4月19日12:01

回答:

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

如果您正在寻找如何将数据集表数据加载到XML文档中(请注意我从XMLDocument变量名称中删除了Schema一词)

你的问题:

对不起,我找不到你。 我需要将该数据集的xml放入xml文档中。 – NLV 2010年4月19日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); } 

你的问题:

但是我收到了错误 – “Root Element Missing”。 有任何想法吗? 更新当我执行xmlR.ReadInnerXML()时它是空的。 有谁知道为什么? NLV

回答:

您认为代码的工作方式存在潜在问题,这意味着它并没有真正创建XMLSchema和XmlData(dsContract),这就是您看到空白XMLDocument的原因。

它可能会帮助你完全解释你想要什么,然后不回复每个人使用部分句子被误解,你必须继续回答更多的部分句子。