我正在用C#编写代码,并且有一个用户可以使用的项目 能够上传.zip文件,并在该文件中读取.xml 以及基于xml标签的章节将动态显示。
现在,它已硬编码一个特定文件,并且在该文件中 该特定的.xml文件。
如何从zip文件中读取.xml文件并在C#中显示该动态?
答案 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。
中的全部或部分文件如果您不想解压缩,则可以使用以下命令直接打开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();
}
}
}
}