如何从文件流中读取压缩的xml

时间:2014-08-19 15:01:59

标签: c# xml filestream xmlreader gzipstream

我要将一些数据存储在xml文件中。简单的故事!为了让它变得不可读,我将它拉上了拉链。这应该工作正常!但我无法读回xml内容!

我以前编写的代码:

using( FileStream fileStream = new FileStream( filepath, FileMode.Create ) ) {
    using( GZipStream zipStream = new GZipStream( fileStream , CompressionMode.Compress ) ) {
        using( XmlWriter xmlWriter = XmlWriter.Create( zipStream, new XmlWriterSettings() { 
            Indent = true, 
            Encoding = Encoding.UTF8, 
            ConformanceLevel = ConformanceLevel.Fragment }
            ) ) {
                xmlWriter.WriteString( xmlDocument.OuterXml );
        }
    }
}

我目前使用的代码:

using( FileStream fileStream = new FileStream( filepath, FileMode.Open ) )
{
    using( GZipStream zipStream = new GZipStream( fileStream , CompressionMode.Decompress ) )
    {
        using( XmlReader xmlReader = XmlReader.Create( zipStream, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment } ) )
        {
            xmlReader.MoveToContent();
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(xmlReader);
        }
    }
}

但它并没有像预期的那样发挥作用。

xml文件看起来很简单:

<data>
    <name>bill</name>
    <age>45</age>
</data>
<data>
    <name>john</name>
    <age>32</age>
</data>
<data>
    <name>bill</name>
    <age>68</age>
</data>

我想使用

XmlNodeList xmlNodeList = xmlDocument.GetElementsByTagName( "data" );

我缺少什么?谢谢你的任何提示。

1 个答案:

答案 0 :(得分:1)

在你的阅读逻辑中 替换

xmlDocument.Load(xmlReader); 

xmlDocument.LoadXml(xmlReader.ReadContentAsString());

这对我有用