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

C# 数据集->XML文档-将数据集加载到XML文档中-C.Net,c#,xml,dataset,C#,Xml,Dataset,我试图将数据集读取为xml,并将其加载到xml文档中 XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument(); using (MemoryStream ms = new MemoryStream()) { //XmlWriterSettings xmlWSettings = new XmlWriterSettings(); //xmlWSettings.ConformanceLevel = ConformanceLe

我试图将数据集读取为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);
      }
   }
}
但是我得到了错误根元素丢失

有什么想法吗

更新

当我执行xmlR.ReadInnerXML时,它是空的。有人知道为什么吗


NLV

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

您不需要调用write start和end document方法:生成完整、格式良好的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);
}

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

您不需要调用write start和end document方法:生成完整、格式良好的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);
}

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

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();

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

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

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();

using (MemoryStream ms = new MemoryStream())
{
    contractHistoryXMLSchemaDoc.Save(ms);
    ms.Flush();
}
给你。 如果根据变量的命名约定,而不是您所问的问题(似乎改变了…),您需要将数据集的XML scema加载到使用模式命名的XML文档中,下面是将数据集的模式加载到XMLDocument中的代码

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

我希望数据集的模式位于单独的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);
}
XmlDocument contractHistoryXMLDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXml(ms,XmlWriteMode.IgnoreSchema);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLDoc.Load(ms);
}
如果您想了解如何将数据集表数据加载到XML文档中,请注意,我从XMLDocument变量名中删除了单词Schema

你的问题:


对不起,我不明白你的意思。我需要将该数据集的xml转换为xml文档NLV 2010年4月19日11:56

答复:

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXmlSchema(ms);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLSchemaDoc.Load(ms);
}
XmlDocument contractHistoryXMLDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXml(ms,XmlWriteMode.IgnoreSchema);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLDoc.Load(ms);
}
如果您希望将模式和数据集放在单独的文档中,代码在上面。 如果只需要模式或xml文档中的数据,请使用上述与问题相关的代码。 如果希望XML模式和数据都位于同一个XMLDocument中,请使用以下代码

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

答复:

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXmlSchema(ms);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLSchemaDoc.Load(ms);
}
XmlDocument contractHistoryXMLDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXml(ms,XmlWriteMode.IgnoreSchema);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLDoc.Load(ms);
}
您认为代码的工作方式存在潜在问题,这意味着它并没有真正创建XMLSchema和XmlData dsContract,这就是为什么您会看到一个空白的XMLDocument

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);
      }
   }
}
这可能会帮助你充分解释你的愿望,然后不要用被误解的部分句子回答每个人,你必须用更多的部分句子来回答。

给你。 如果根据变量的命名约定,而不是您所问的问题(似乎改变了…),您需要将数据集的XML scema加载到使用模式命名的XML文档中,下面是将数据集的模式加载到XMLDocument中的代码

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

我希望数据集的模式位于单独的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);
}
XmlDocument contractHistoryXMLDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXml(ms,XmlWriteMode.IgnoreSchema);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLDoc.Load(ms);
}
如果您想了解如何将数据集表数据加载到XML文档中,请注意,我从XMLDocument变量名中删除了单词Schema

你的问题:


对不起,我不明白你的意思。我需要将该数据集的xml转换为xml文档NLV 2010年4月19日11:56

答复:

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXmlSchema(ms);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLSchemaDoc.Load(ms);
}
XmlDocument contractHistoryXMLDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXml(ms,XmlWriteMode.IgnoreSchema);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLDoc.Load(ms);
}
如果您希望将模式和数据集放在单独的文档中,代码在上面。 如果只需要模式或xml文档中的数据,请使用上述与问题相关的代码。 如果希望XML模式和数据都位于同一个XMLDocument中,请使用以下代码

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

答复:

XmlDocument contractHistoryXMLSchemaDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXmlSchema(ms);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLSchemaDoc.Load(ms);
}
XmlDocument contractHistoryXMLDoc = new XmlDocument();
using (MemoryStream ms = new MemoryStream())
{
    dsContract.WriteXml(ms,XmlWriteMode.IgnoreSchema);
    ms.Seek(0, SeekOrigin.Begin);
    contractHistoryXMLDoc.Load(ms);
}
您认为代码的工作方式存在潜在问题,这意味着它并没有真正创建XMLSchema和XmlData dsContract,这就是为什么您会看到一个空白的XMLDocument

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

这可能有助于您充分解释您的愿望,然后不要使用被误解的部分句子回复每个人,您必须继续使用更多的部分句子进行回复。

您的XML文档是什么样子的?对不起,我不明白您的意思。我需要将该数据集的xml转换成xml文档。您的xml文档是什么样子的?对不起,我不明白。我要去拿x
将该数据集的模式转换为xml文档。我希望数据集的模式在一个单独的xml文档中。我希望数据集的模式在一个单独的xml文档中。我想我的问题标题把您弄糊涂了。我得到了数据集。我想把它加载到一个xml文档中,我想我的题目把你弄糊涂了。我得到了数据集。我想把它加载到一个xml文档中。