在Java中,您可以传递像“zip:zip_file!xml_file”这样的URL,并且它将使用zip文件中指定的XML文件.XmlUrlResolver不具有此功能。有没有办法做到这一点?如何在C#中直接读取ZIP文件中的XML文件?
2
A
回答
4
有一个开源的解决方案。 (代码为XmlZipResolver,在xml reports。)它从XmlUrlResolver继承来添加此功能。
这样做其实很简单。 XmlZipResolver类继承自XmlUrlResolver。因此,在创建XmlUrlResolver对象以访问XML文件之前,您需要创建一个XmlZipResolver对象,然后您可以像对待XmlUrlResolver对象那样对待它。而且这适用于XmlUrlResolver仅在URL以zip开头时才使用附加代码处理的任何URL:或jar :(Java jar文件是zip文件)。
关键部分是调用GetEntity,它将打开zip文件,然后在zip文件中获取所请求的xml文件的流。此代码使用SharpZipLib进行所有zip文件访问。
之后,所有对成员函数的调用都从嵌入式xml文件流中返回,这一切都非常简单。因为GetEntity()返回一个对象,如果它返回一个基本的XmlUrlResolver对象,那么这个类中的方法不会被调用。因此,所有其余的成员函数都是专门为zip文件中的文件编写的。
另一个不是的项目是返回的Stream是一个对象,它包含三个对象ZipFile,作为zip文件的Stream以及作为zip条目的流。此返回的对象从Stream继承。对于除Close()之外的每个调用,它只是将相同的调用传递给zip条目流对象。但是在Close上(因此间接在Dispose上),它会关闭所有三个对象。
再次,XmlZipResolver的代码为xml reports。
4
下面是一些代码,我有一个使用ICSharpCode.SharpZipLib:
public bool Process()
{
var importFile = new FileInfo("c:\\foo\myzip.zip");
var success = true;
using (var zipStream = new ZipInputStream(importFile.OpenRead()))
{
ZipEntry theEntry;
while ((theEntry = zipStream.GetNextEntry()) != null)
{
var lowerName = theEntry.Name.ToLower();
try
{
if (lowerName.EndsWith(".xml") && !lowerName.StartsWith("__macosx"))
{
var doc = new XmlDocument();
doc.Load(zipStream);
}
}
catch (Exception e)
{
success = false;
Log.Error(string.Format("Error parsing {0} ERROR {1}",lowerName,e.Message));
}
}
}
return success;
}
这种处理每个XML文件中的拉链......除了那突然出现:)
相关问题
- 1. 直接从zip中读取HTML文件
- 2. 直接读取Zip文件中的文件 - Java
- 3. 如何在C#中读取xml文件?
- 4. 直接在类中使用c读取XML文件#
- 5. 从zip文件中读取的C库
- 6. 如何从Java中的Zip文件中的XML读取
- 7. 如何直接将XML文件写入zip压缩文件?
- 8. 如何在python中直接添加文件到zip文件?
- 9. 如何在C#中提取ZIP文件
- 10. 阅读zip文件中的zip文件
- 11. 如何阅读XML文件在C#中
- 12. 如何读取zip文件中的htm文件?
- 13. 在C++中读取配置xml文件
- 14. 在C#中读取.XML文件
- 15. 在C#中读取多级XML文件
- 16. 在C++程序中读取XML文件
- 17. 在c#中读取xml文件wpf
- 18. 如何在XNA中读取.XML文件?
- 19. 如何在iOS中读取xml文件
- 20. 如何在Delphi中读取XML文件?
- 21. 如何在grails中读取xml文件?
- 22. 如何在javascript中读取xml文件
- 23. 如何在JMeter中读取XML文件?
- 24. 如何在android中读取xml文件?
- 25. 如何在java中读取xml文件
- 26. 如何直接从.zip文件读取文件,而无需在android中提取它
- 27. 如何OpenCV的C++读取.xml文件
- 28. 的xml文件读取C#
- 29. 如何直接读取dbf/dbt文件?
- 30. C#SharpZipLib直接将文件写入zip
愚蠢的MAC OSX元文件准备推荐SharpZipLib。 +1 :) – Roloc 2011-03-06 01:19:50