2011-08-05 22 views
2

我做XSLT转换。我目前有一个解决方法,我已经将xlsx文件的全部内容解压到一个单独的文件夹中。但是,为了简单起见,我的程序将xlsx文件作为输入,因此我想知道是否有更简单的方法让我的程序指向xlsx文件中的xml,而无需解压缩内容。我试过去file.xlsx \ _rels \ .rels,但似乎没有工作。我目前使用这个输入代码是文件路径来XLSX中的XML在C#

String inputFile = "file.xlsx_folder\\_rels\\.rels" 
XdmNode input = processor.NewDocumentBuilder().Build(new Uri(inputFile)); 

但我想直接在xlsx中有这一点。

回答

1

是的,有一个简单的方法,你就不需要解压整个文件。

而是你作为参数传递给萨克森的API生成函数传递文件的路径,通过一个XmlReader或串流播放XSLX文件的未压缩的部分的实例。

System.IO.Packaging.Package的打开静态方法可用于获取一个Package实例,您可以在其上调用GetStream来解压缩所需的零件并将其作为Stream返回。包处理符合Open Packaging Convention的文件,如Excel的xslx格式。

下面的代码解压缩包部分的流,使用该创建一个XmlReader实例,最后经过的XmlReader作为参数来生成函数:

  string filename = "c:\\test\\file.xslx"; 
      string partPath = "/_rels/.rels"; 

      Package xpsPackage = Package.Open(fileName, FileMode.Open) 
      Uri partUri = new Uri(partPath, UriKind.Relative); 
      PackagePart xpsPart = xpsPackage.GetPart(partUri); 

      Stream xpsStream = xpsPart.GetStream(FileMode.Open) 
      XmlReader xmlReader = XmlReader.Create(xpsStream); 

      XdmNode input = processor.NewDocumentBuilder().Build(xmlReader);