从zip文件夹中的xml文件动态显示内容

时间:2019-02-26 09:34:58

标签: c# xml zip

我正在用C#编写代码,并且有一个用户可以使用的项目 能够上传.zip文件,并在该文件中读取.xml 以及基于xml标签的章节将动态显示。

现在,它已硬编码一个特定文件,并且在该文件中 该特定的.xml文件。

如何从zip文件中读取.xml文件并在C#中显示该动态?

2 个答案:

答案 0 :(得分:1)

Microsoft文档对此有一个示例。从zip存档中提取特定文件并将其解压缩到目录中: https://docs.microsoft.com/en-us/dotnet/standard/io/how-to-compress-and-extract-files#example-2-extract-specific-file-extensions

然后,下一步将是处理目录https://docs.microsoft.com/en-us/dotnet/api/system.io.directory.getfiles?view=netframework-4.7.2#System_IO_Directory_GetFiles_System_String_System_String_

中的全部或部分文件

如果您不想解压缩,则可以使用以下命令直接打开ZipArchiveEntry:https://docs.microsoft.com/en-us/dotnet/api/system.io.compression.ziparchiveentry.open?view=netframework-4.7.2

在zip中有多个Xml文件的情况下,myType的所有序列化代码都应归结为:

string zipPath = @".\result.zip";
List<myType> listResults ;

using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
    XmlSerializer serializer = new XmlSerializer(typeof(myType);
    listResults = 
        archive
            .Entries
            .Where(entry => entry.FullName
                                 .EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
            .Select(entry => (myType)serializer.Deserialize(entry.Open()))
            .ToList();
}

对于项目中缺少的参考,请遵循灯泡!

答案 1 :(得分:0)

System.IO.Compression.FileSystem程序集添加到项目引用中。完成此操作后,您可以打开这样的档案:

static void Main(string[] args)
{
    var zipPath = "Path-To-Your-Zipfile";

    using (var archive = ZipFile.OpenRead(zipPath))
    {
        var xmlFile = archive.Entries.FirstOrDefault(e => e.FullName.EndsWith(".xml"));

        if(xmlFile == null)
            return;

        using (var stream = xmlFile.Open())
        {
            using (var reader = new StreamReader(stream))
            {
                var fileContents = reader.ReadToEnd();
            }
        }
    }
}