代码之家  ›  专栏  ›  技术社区  ›  Timothy Carter

如何不使用C数据集的漂亮打印来编写XML

  •  8
  • Timothy Carter  · 技术社区  · 17 年前

    在C中,如何将数据集写入文件而不使用漂亮的打印?

    使用C和.NET 2.0,我一直在使用dataset.writexml(文件名,xmlWriteMode.ignoreschema),默认情况下,它使用漂亮的打印来编写XML文件。使用我编写的XML文件的公司建议,如果不使用漂亮的打印,则不会影响它们,并且会显著减小文件的大小。在system.xml名称空间中稍加玩转,我确实找到了一个解决方案。然而,在我的搜索中,我在任何地方都找不到答案,所以我认为如果我发布这个问题,将来可能会对其他人有所帮助。此外,如果有更好或至少不同的方法来实现这一点,我一点也不会感到惊讶。

    对于那些不知道的人(直到今天我才知道),XML“漂亮的打印”是:

    <?xml version="1.0" standalone="yes"?>
    <NewDataSet>
      <Foo>
        <Bar>abc</Bar>
      </Foo>
    </NewDataSet>
    

    如果没有漂亮的打印,看起来是这样的:

    <?xml version="1.0" encoding="utf-8"?><NewDataSet><Foo><Bar>abc</Bar></Foo></NewDataSet>
    

    此外,节省的大小也相当可观,70MB的文件正在变得大约40MB。如果没有其他人,我今天晚些时候会发布我的解决方案。

    4 回复  |  直到 17 年前
        1
  •  8
  •   casperOne    17 年前

    很简单,你只需要创建一个 XmlWriter 使用一个 XmlWriterSettings 哪个有 Indent 属性设置为false:

    // The memory stream for the backing.
    using (MemoryStream ms = new MemoryStream())
    {
      // The settings for the XmlWriter.
      XmlWriterSettings settings = new XmlWriterSettings();
    
      // Do not indent.
      settings.Indent = false;
    
      // Create the XmlWriter.
      using (XmlWriter xmlWriter = XmlWriter.Create(ms, settings))
      {
         // Write the data set to the writer.
         dataSet.WriteXml(xmlWriter);
      }
    }
    
        2
  •  6
  •   atsjoo    17 年前

    比使用xmlWriterSettings更简单:

    XmlTextWriter xml = new XmlTextWriter(fileName, Encoding.UTF8) 
        { Formatting = Formatting.None };
    dataSet.WriteXml(xml);
    
        3
  •  2
  •   cjk    17 年前

    这就是我要尝试的……:

    edit:(不编译,需要在xmlwriter中添加设置。创建构造函数-但理论存在。)

    DataSet ds = new DataSet();
    System.Xml.XmlTextWriter xmlW = new System.Xml.XmlTextWriter("C:\\temp\\dataset.xml");
    System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
    settings.Indent = false;
    settings.NewLineChars = String.Empty;
    xmlW.Settings = settings;
    ds.WriteXml(xmlW);
    
        4
  •  1
  •   erlando    17 年前

    如果不可能影响数据集XML的格式,我只需将XML加载到新的XML文档中,然后发送不受格式限制的xmldocument.outerxml。