通过代码解压出InfoPath模板文件xsn中的文件
2008-05-20 22:04
351 查看
[align=center]通过代码解压出InfoPath模板文件xsn中的文件[/align]
经过一天的搜索,发现InfoPath的模板文件是一个后缀为xsn的文件,其实他是一个cab文件,大家可以试试,将他的后缀修改为cab或者zip,都可以解压出来文件。但是我们如何通过代码的方式来解压出其中的文件呢?在SharePoint中的表单库,我们不能等用户上传表单文件后再进行数据结构的分析,所以我们要从InfoPath的模板文件下手,最先想到的就是操作表单库的模板文件,也就是InfoPath的模板文件,这里语义有些歧异。InfoPath设计后的后缀名为xsn文件是InfoPath的模板文件,而在SharePoint表单库中的InfoPath模板文件确是一个后缀为xml的InfoPath模板文件。后者就是我们需要进行分析的文件。用记事本打开它我们会发现它是一个标准的XML文件,但是确比一般的XML文件多出了一些描述内容:
这两行描述的作用就是指出这是一个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操作函数,这里也共享给大家,如下:
其中:
需要添加一个组件
Microsoft.Office.InfoPath.Server.dll
需要引用两个命名空间
using Microsoft.Office.InfoPath.Server;
using Microsoft.Office.InfoPath.Server.Controls;
例子中是通过一个Windows自带的工具extract.exe来实现,但这并不是我想要的方法。我想通过.NET的方式来实现。但是这个方法也能实现,只是我将这个函数改在ConsoleApplication下使用,但是我改后并没有真正做成功T_T,不知原因何在,粗略看了CAB的SDK也没找出个所以然。所以放弃了这个方法,去尝试其他的方法。
期间又得到了十一同学的大力支持,提供给我一些实验的LAB,但是好像里面有压缩的方法,没有提到解压的方法,于是,又未果。
最后,我突然想到,既然这个xsn文件就是一个cab文件,那么为什么我要搜索xsn文件的解压缩呢,唉……笨啊……之前搜索xsn的解压资料相当的少啊,于是改搜索cab 的解压缩,厚厚~~~被我找到了吧。
Elmue在CodeProject上发布了一个CAB的解压缩组件,是用C++编写的,被作者包装为同时支持C++和.NET使用。于是仔细查看学习文档。
Cabinet File (*.CAB) Compression and Extraction
这个东东真的很好,如果有此类需要,推荐大家使用这个组件,代码编写很简单。
我们只需要如下步骤:
1.添加CabLib.dll组件的引用。
2.实例化解压类。
CabLib.Extract i_Extract = new CabLib.Extract();
3.解压我们需要的文件。
i_Extract.ExtractFile(@"C:\Temp\Packed.cab", @"E:\ExtractFolder");
三步就实现了一个CAB文件的解压缩。
这里我做过实验了,我们只需要把里面的CAB文件直接换成InfoPath的xsn模板文件即可,但有个需要注意的地方,这个组件对中文文件名的XSN文件不支持,会报出字符错误信息,所以建议大家使用英文名称的XSN文件,或者使用File类的CopyTo方法复制一个临时的英文名称的模板文件出来,然后对其解压缩,解压缩后再通过File类的Delete方法删除这个文件即可。
然后我们就在指定路径下获得了这个template.xml模板文件,也就是说我们获得了InfoPath表单的数据结构。然后通过这个数据结构就可以对InfoPath作一些分析和操作,例如使用WebPart根据数据结构展现,EventHandler根据数据结构处理数据等等。
OK,就写到这里,希望对大家有所帮助。
希望转载留名,谢谢:)
Tag标签: SharePoint 2007,MOSS,InfoPath本文出自 “努力学习的小熊” 博客,转载请与作者联系!
经过一天的搜索,发现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"?> |
于是我想做的更好一些,在管理员发布表单模板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("<script>alert(\"解压失败!错误原因:" + err.Message + "!\")</script>"); return false; } } |
需要添加一个组件
Microsoft.Office.InfoPath.Server.dll
需要引用两个命名空间
using Microsoft.Office.InfoPath.Server;
using Microsoft.Office.InfoPath.Server.Controls;
例子中是通过一个Windows自带的工具extract.exe来实现,但这并不是我想要的方法。我想通过.NET的方式来实现。但是这个方法也能实现,只是我将这个函数改在ConsoleApplication下使用,但是我改后并没有真正做成功T_T,不知原因何在,粗略看了CAB的SDK也没找出个所以然。所以放弃了这个方法,去尝试其他的方法。
期间又得到了十一同学的大力支持,提供给我一些实验的LAB,但是好像里面有压缩的方法,没有提到解压的方法,于是,又未果。
最后,我突然想到,既然这个xsn文件就是一个cab文件,那么为什么我要搜索xsn文件的解压缩呢,唉……笨啊……之前搜索xsn的解压资料相当的少啊,于是改搜索cab 的解压缩,厚厚~~~被我找到了吧。
Elmue在CodeProject上发布了一个CAB的解压缩组件,是用C++编写的,被作者包装为同时支持C++和.NET使用。于是仔细查看学习文档。
Cabinet File (*.CAB) Compression and Extraction
这个东东真的很好,如果有此类需要,推荐大家使用这个组件,代码编写很简单。
我们只需要如下步骤:
1.添加CabLib.dll组件的引用。
2.实例化解压类。
CabLib.Extract i_Extract = new CabLib.Extract();
3.解压我们需要的文件。
i_Extract.ExtractFile(@"C:\Temp\Packed.cab", @"E:\ExtractFolder");
三步就实现了一个CAB文件的解压缩。
这里我做过实验了,我们只需要把里面的CAB文件直接换成InfoPath的xsn模板文件即可,但有个需要注意的地方,这个组件对中文文件名的XSN文件不支持,会报出字符错误信息,所以建议大家使用英文名称的XSN文件,或者使用File类的CopyTo方法复制一个临时的英文名称的模板文件出来,然后对其解压缩,解压缩后再通过File类的Delete方法删除这个文件即可。
然后我们就在指定路径下获得了这个template.xml模板文件,也就是说我们获得了InfoPath表单的数据结构。然后通过这个数据结构就可以对InfoPath作一些分析和操作,例如使用WebPart根据数据结构展现,EventHandler根据数据结构处理数据等等。
OK,就写到这里,希望对大家有所帮助。
希望转载留名,谢谢:)
Tag标签: SharePoint 2007,MOSS,InfoPath本文出自 “努力学习的小熊” 博客,转载请与作者联系!
相关文章推荐
- 通过代码解压出InfoPath模板文件xsn中的文件
- 用程序修改infopath的xsn模板文件 .
- 个人学习代码保存:例10.通过模板创建静态页面的操作文件的一个自定函数
- 在servlet中通过servletcontext对象读取资源文件的模板代码
- 用程序修改infopath的xsn模板文件
- 用程序修改infopath的xsn模板文件
- 通过C#代码 压缩/解压文件
- 通过t4模板结合XML定义文件生成MVVM中的Model Entity Class 代码
- infopath .xsn模板文件修改
- 通过t4模板结合XML定义文件生成MVVM中的Model Entity Class 代码
- 在代码中直接写母语,通过T4模板自动生成母语的.resx文件
- Android中通过代码读取xml文件中的内容
- 通过xml模板生成意见审批表word文件
- unity 通过代码查找一个文件夹下的所有文件
- java 两个通过java代码操作FTP的类,上传下载删除,获取文件
- 使用 minizip 解压 ZIP 文件的代码例子
- Asscess 通过DataTable写入数据到Excel现有模板 ,流文件导出
- 通过ccb(CocosBuilder)文件生成cocos2dx代码
- Ubuntu下通过CMake文件编译CUDA+OpenCV代码操作步骤
- 微信小程序开发常用技巧(9)——使用模板文件方便公共代码开发