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

时间:2010-04-19 11:47:52

标签: c# xml dataset

我正在尝试将数据集读取为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

4 个答案:

答案 0 :(得分:4)

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

  • 您无需调用写入开始和结束文档方法:DataSet.WriteXmlSchema可生成完整,格式良好的xsd。
  • 在编写架构之后,流定位在其末尾,因此当您致电XmlReader时,XmlDocument.Load无法读取任何内容。

所以主要的是你需要使用MemoryStream重置Seek的位置。您还可以简化整个方法:您不需要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);
}

答案 1 :(得分: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);
   }

}

答案 2 :(得分:0)

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

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();

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

答案 3 :(得分:0)

你走了。 如果根据变量的命名约定(不是你提出的问题,似乎改变了......),你需要将数据集的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的原因。

它可能会帮助您完全解释您的意愿,然后不会回复所有使用部分句子被误解的人,并且您必须继续回复更多的部分句子。