使用WriteXml时如何抑制正在写入的数据集名称?

时间:2015-01-06 19:36:09

标签: c# dataset writexml

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>

3 个答案:

答案 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();