在c#中优化大型XML文件

时间:2015-10-10 07:22:49

标签: c#

如何处理大型XML文件。我知道以下是影响XML文件的大小。     1)重复模式发生,例如。 dfd dfser,...     2)图案高度和尺寸(以字节为单位)     3)缩进     4)多个空格     5)扁平化模式

我的问题是如何在c#中实现上述参数。我搜索了这个,但无法得到任何例子。

任何人都可以帮助我实现这一目标。

更新1: 在压缩算法中,xml文件的大小减小了,但我想通过编程来减小文件大小。我从类中创建一个xml文件, 例如:

<assets>
<asset>
<id> 1</id>
<Hardware></Hardware> ....

</asset>

<asset>
<id> 1</id>
<Hardware> mouse</Hardware>
<Hardware>keyboard</Hardware> ....

</asset>
</assets>

像这样我需要为1000多个资产提供更多配置信息以及xml以上,这里相同的xml标签会一次又一次地重复。如何从c#类创建优化的xml文件。

1 个答案:

答案 0 :(得分:2)

也许像这样使用GZip压缩?即使在最快的模式下,它也几乎完全消除了重复XML标签产生的文件大小开销。

[Serializable]
public class Asset
{
    public int Id { get; set; }
    public List<string> Hardware { get; set; }
}

...

List<Asset> assets = new List<Asset> {new Asset {Id = 1, 
                Hardware = new List<string> {"mouse", "keyboard"}}};

//serialize
using (GZipStream zs = new GZipStream(File.Create("compressed_xml.zip"),
                                            CompressionLevel.Fastest))
{
    XmlSerializer serializer = new XmlSerializer(typeof (List<Asset>));
    serializer.Serialize(zs, assets);
}

//deserialize
using (GZipStream zs = new GZipStream(File.Open("compressed_xml.zip",FileMode.Open), 
                             CompressionMode.Decompress))
{
    XmlSerializer serializer = new XmlSerializer(typeof(List<Asset>));
    assets=(List<Asset>) serializer.Deserialize(zs);
}