0

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>
4

3 回答 3

1

您可以将 XML 加载到内存中,然后在写出之前在那里进行编辑。您想如何写出它取决于您,因为删除 XML 树的根节点会留下无效的 XML。

using(MemoryStream ms = new MemoryStream())
{
    dataSet.WriteXml(ms);
    ms.Position = 0;

    var children = XDocument.Load(ms).Root.Elements();
}

此代码为您提供了一组XElement对象,这些对象代表DataTable您的DataSet. 从那里你可以做任何你需要做的事情。

于 2015-01-06T20:28:09.850 回答
1

一个优雅的解决方案是使用 XSLT,但这对于这个简单的目的来说可能太多了。您还可以实现自己的自定义XmlWriter,将每个操作转发到实际实现,根元素除外。但这确实是一种 hack,而不是最可维护的解决方案。

在这个简单的例子中,我会将 XML 写入内存 ( StringWriter+ XmlWriter),将其加载到XmlDocumentDOM 中,然后重新排列 DOM 中的内容。

于 2015-01-06T19:44:44.793 回答
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();
于 2015-01-06T21:13:08.747 回答