Да, есть более простой способ, вам не нужно разархивировать весь файл.
Вместо пути к файлу, который вы передали в качестве параметра функции построения Saxon API, передайте экземпляр XmlReader или Stream несжатой части файла xslx.
Статический метод Open System.IO.Packaging.Package может использоваться для получения экземпляра Package, для которого вы вызываете GetStream, чтобы распаковать нужную вам часть и вернуть ее в виде потока. Пакет обрабатывает файлы, соответствующие Open Packaging Convention, например формат xslx в Excel.
Приведенный ниже код распаковывает часть пакета в Stream, использует ее для создания экземпляра XmlReader и, наконец, передает XmlReader в качестве параметра функции Build:
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);