经过一天的搜索,发现InfoPath的模板文件是一个后缀为xsn的文件,其实他是一个cab文件,大家可以试试,将他的后缀修改为cab或者zip,都可以解压出来文件。但是我们如何通过代码的方式来解压出其中的文件呢?在SharePoint中的表单库,我们不能等用户上传表单文件后再进行数据结构的分析,所以我们要从InfoPath的模板文件下手,最先想到的就是操作表单库的模板文件,也就是InfoPath的模板文件,这里语义有些歧异。InfoPath设计后的后缀名为xsn文件是InfoPath的模板文件,而在SharePoint表单库中的InfoPath模板文件确是一个后缀为xml的InfoPath模板文件。后者就是我们需要进行分析的文件。用记事本打开它我们会发现它是一个标准的XML文件,但是确比一般的XML文件多出了一些描述内容: mso-infoPathSolution name="urn:schemas-microsoft-com:office:infopath:XmUJ-i-Jk1RQ77--5e---:-myXSD-2008-05-09T02-41-53" href="manifest.xsf" solutionVersion="1.0.0.6" productVersion="12.0.0" PIVersion="1.0.0.0" ?> mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?> 这两行描述的作用就是指出这是一个InfoPath的表单模板,保存xml文件后,如果机器上安装了InfoPath(我的环境是InfoPath 2007),那么这个xml文件的图标就会发生改变,变成可由InfoPath打开的一个文件,我们双击后就会以InfoPath来打开这个文件。这里不再多说,不是我们的主题。 于是我想做的更好一些,在管理员发布表单模板xsn文件后,直接操作这个xsn文件。由于它就是个cab压缩包,我将其进行了解压。发现了其中具有六个文件: manifest.xsf myschema.xsd sampledata.xml template.xml upgrade.xsl view1.xsl 哈,发现了我们需要的tempalte.xml文件。其他文件也各有用处,此处不需关心他们。那么我们只要实现了解压xsn文件,那么就能获得这个模板文件来对InfoPath表单的数据结构进行分析了。 刚开始,westart同学给我提供了微软解决方案包中的InfoPath操作函数,这里也共享给大家,如下: public bool f_ExternXsn(string InputFile, string OutputDirecty) { try { string serverMap = Server.MapPath(""); FileInfo fi = new FileInfo(InputFile); DirectoryInfo di = new DirectoryInfo(OutputDirecty); System.Diagnostics.Process process1 = new System.Diagnostics.Process(); process1.StartInfo.Arguments = @"/y /e " + fi.FullName + @" /l " + di.FullName; process1.StartInfo.FileName = serverMap + @"\extract.exe "; process1.Start(); //等待解压 while (!process1.HasExited) { } process1.Close(); return true; } catch (System.Exception err) { Response.Write(""); return false; } } 本文来源:https://www.wddqw.com/doc/031c09c58bd63186bcebbcdc.html