将Packagepart复制到文件或内存

问题描述:

我想提取xlsx文件以获取sheet1.xml文件。现在我正在为Package和PackagePart而努力。我觉得最明显的方法是阅读特定的文件,复制内容到XmlDocument 这是我有这么远:将Packagepart复制到文件或内存

XmlDocument doc = new XmlDocument(); 
using (Package package = ZipPackage.Open(xlsFile, FileMode.Open, FileAccess.Read)) 
{ 
    foreach (PackagePart part in package.GetParts()) 
    { 
     var target = Path.GetFullPath(Path.Combine(tempFolderPath, part.Uri.OriginalString.TrimStart('/'))); 
     var targetDir = target.Remove(target.LastIndexOf('\\')); 
     if (!Directory.Exists(targetDir)) 
      Directory.CreateDirectory(targetDir); 

     using (Stream source = part.GetStream(FileMode.Open, FileAccess.Read)) 
     { 
      FileStream targetFile = File.OpenWrite(target); 
      byte[] bytes = new byte[source.Length]; 
      source.Read(bytes, 0, (int)source.Length); 
      source.Close(); 
      //source.CopyTo(targetFile); 
      //doc.Load(source.Write()); 
      //targetFile.Close(); 
     } 
    } 
} 

我使用.NET 3.5,所以我不能使用Stream source.CopyTo方法。 我想将Sheet1.xml的内容复制到XmlDocument类的文档中。

谢谢! 保罗

您可以使用XmlDocument.Load overload which takes a Stream

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(part.GetStream(FileMode.Open, FileAccess.Read)); 

一旦加载,然后你可以使用XmlDocument.Save

xmlDoc.Save(target); 
+0

大,这么简单!我也犯了一个愚蠢的错误,但现在没有意思...... :) 谢谢! – 2013-05-07 09:57:32