C# c中xlsx中xml的文件路径#

C# c中xlsx中xml的文件路径#,c#,xml,xslt,saxon,xlsx,C#,Xml,Xslt,Saxon,Xlsx,我正在使用Saxon对excel文件中的xml进行xslt转换,转换是在xlsx文件中的.rels xml文件上进行的。我目前有一个变通办法,将xlsx文件的全部内容解压缩到一个单独的文件夹中。然而,为了简单起见,我的程序将xlsx文件作为输入,因此我想知道是否有一种更简单的方法可以让我的程序指向xlsx文件中的xml,而无需解压缩内容。我尝试了路径到文件.xlsx\\u rels\.rels,但似乎不起作用。我当前用于此输入的代码是 String inputFile = "file.xlsx_

我正在使用Saxon对excel文件中的xml进行xslt转换,转换是在xlsx文件中的.rels xml文件上进行的。我目前有一个变通办法,将xlsx文件的全部内容解压缩到一个单独的文件夹中。然而,为了简单起见,我的程序将xlsx文件作为输入,因此我想知道是否有一种更简单的方法可以让我的程序指向xlsx文件中的xml,而无需解压缩内容。我尝试了路径到文件.xlsx\\u rels\.rels,但似乎不起作用。我当前用于此输入的代码是

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

但是我希望将这一点直接放在xlsx中。

是的,有一种更简单的方法,您不需要解压缩整个文件

传递xslx文件未压缩部分的XmlReader或Stream实例,而不是作为参数传递给Saxon API构建函数的文件路径

的openstatic方法可用于获取一个包实例,在该实例上调用GetStream解压所需的部分并将其作为流返回。包处理符合开放打包约定的文件,如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);