C# - 使用时: DataSet.WriteXml(filePath);
数据集名称将被写为根元素。你怎么压制这个?
注意:我有一个与此DataSet绑定的模式,XML数据正确读入模式。
当前输出:
<DataSet> //dataset name prints -- REMOVE
<HAPPY>
<HAPPY2>BLAH</HAPPY2>
</HAPPY>
</DataSet> //dataset name prints -- REMOVE
期望输出:
<HAPPY>
<HAPPY2>BLAH</HAPPY2>
</HAPPY>
答案 0 :(得分:0)
一个优雅的解决方案是使用XSLT,但这对于这个简单的目的来说可能太多了。您还可以实现自己的自定义XmlWriter
,它将每个操作转发到实际的实现,但根元素除外。但这确实是一种破解,而不是最易维护的解决方案。
在这个简单的例子中,我会将XML写入内存(StringWriter
+ XmlWriter
),将其加载到XmlDocument
中,然后重新排列DOM中的内容。
答案 1 :(得分:0)
您可以将XML加载到内存中,然后在编写之前进行编辑。您希望如何编写它取决于您,因为删除XML树的根节点将为您留下无效的XML。
using(MemoryStream ms = new MemoryStream())
{
dataSet.WriteXml(ms);
ms.Position = 0;
var children = XDocument.Load(ms).Root.Elements();
}
此代码为您提供了XElement
个对象的集合,这些对象代表DataTable
中的每个DataSet
。从那里你可以做任何你需要做的事情。
答案 2 :(得分:0)
这有效......
XmlWriter w = new XmlTextWriter("C:Blah.xml", Encoding.UTF8);
w.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
XmlDataDocument xd = new XmlDataDocument(DataSet);
XmlDataDocument xdNew = new XmlDataDocument();
DataSet.EnforceConstraints = false;
XmlNode node = xdNew.ImportNode(xd.DocumentElement.LastChild, true);
node.WriteTo(w);
w.Close();