c# 提取文档信息的示例
事情时这样,有用友u8的字典数据的帮助文档一份,同事需要把里面的很多张表的字典信息给提取出来,然后构成sql语句,插入数据库。字典就是一张对表里的字段的一个说明,长这样
同事一开始是手动复制到excel文档在改的,他问我有没有什么简单的办法,所以我就决定用代码去实现,把表格、表名等一些有效数据构成对象,有了一个对象就好写sql了。
首先,我在百度上搜索,发现这个chm帮助文档能被反编译成html,经过一番操作,使用windows自带的工具hh.exe就可以实现帮助文档的反编译。运行cmd,直接输入命令就行,具体命令是这样:
hh-decompiled:\test\helphelp.chm
d:\test\help是反编译后的目录。
反编译之后,就会得到具体的html文档,和js、css,长这样:
test目录是我自己建的。
后面就是查看html源码,分析出关键信息的xPath路径该怎么写,因为这里我用到了.net的一款工具专门对html操作的,叫做:HtmlAgilityPack,我的翻译是:html敏捷开发包,写xpath比写正则来的容易,这个包能很好的操作html的节点,获取html、innertext、属性。
贴上我的关键方法:
publicTableInfoGetTableInfo() { TableInfotab=newTableInfo(); HtmlDocumentdoc=newHtmlDocument(); doc.Load(FullPathName,Encoding.GetEncoding("gb2312"),true); if(doc==null) { throw newNullReferenceException(FullPathName+"\r\n没有加载出文档"); } stringpathGetTableName="/html/head/title"; stringpathGetTableDesc="/div/p"; StringpathGetTd="/div/table/tr"; varnodeTitle=doc.DocumentNode.SelectSingleNode(pathGetTableName); if(null!=nodeTitle) { tab.TableName=nodeTitle.InnerText.Split(newchar[1]{''})[0].Replace("\r","").Replace("\n","").Replace("\t","").Replace("&","").Replace("nbsp;",""); } varnodeBody=doc.GetElementbyId("pagebody"); varstr=nodeBody.OuterHtml; vardoc1=newHtmlDocument(); doc1.LoadHtml(str); varnodeDesc=doc1.DocumentNode.SelectSingleNode(pathGetTableDesc); if(null!=nodeDesc) { tab.tableDescription=nodeDesc.InnerText.Split(newchar[1]{''})[0].Replace("\r","").Replace("\n","").Replace("\t","").Replace("&","").Replace("nbsp;",""); } varnodesTr=doc1.DocumentNode.SelectNodes(pathGetTd); if(nodesTr==null) { returntab; } Listlists=newList (); for(vari=1;i 这里还出现一个问题,“指定的路径不合法”,原因是,我直接点击文件右键-》属性-》安全把那里的文件路经复制到代码上去了,其实这样复制,会造成路径字符串最开始的地方有个特殊字符,在vs里是隐藏的,后来我就复制地址栏上的路径,就没问题了。
最后,需要完善的是,通过读取目录,把目录中的所有html结尾的文件遍历,并过滤出需要的表,在构建对象。
以上就是c#提取文档信息的示例的详细内容,更多关于c#提取文档信息的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。