2011-08-05 23 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);