我正在尝试将数据集读取为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
答案 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的原因。
它可能会帮助您完全解释您的意愿,然后不会回复所有使用部分句子被误解的人,并且您必须继续回复更多的部分句子。