时间:2021-05-20
事情时这样,有用友u8的字典数据的帮助文档一份,同事需要把里面的很多张表的字典信息给提取出来,然后构成sql语句,插入数据库。字典就是一张对表里的字段的一个说明,长这样
同事一开始是手动复制到excel文档在改的,他问我有没有什么简单的办法,所以我就决定用代码去实现,把表格、表名等一些有效数据构成对象,有了一个对象就好写sql了。
首先,我在百度上搜索,发现这个chm帮助文档能被反编译成html,经过一番操作,使用windows自带的工具 hh.exe 就可以实现帮助文档的反编译。运行cmd,直接输入命令就行,具体命令是这样:
hh -decompile d:\test\help help.chm
d:\test\help是反编译后的目录。
反编译之后,就会得到具体的html文档,和js、css,长这样:
test目录是我自己建的。
后面就是查看html源码,分析出关键信息的xPath路径该怎么写,因为这里我用到了.net的一款工具专门对html操作的,叫做:HtmlAgilityPack,我的翻译是:html敏捷开发包,写xpath比写正则来的容易,这个包能很好的操作html的节点,获取html、innertext、属性。
贴上我的关键方法:
public TableInfo GetTableInfo(){TableInfo tab = new TableInfo();HtmlDocument doc = new HtmlDocument();doc.Load(FullPathName, Encoding.GetEncoding("gb2312"), true);if (doc == null){throw new NullReferenceException(FullPathName + "\r\n没有加载出文档");}string pathGetTableName = "/html/head/title";string pathGetTableDesc = "/div/p";String pathGetTd = "/div/table/tr";var nodeTitle=doc.DocumentNode.SelectSingleNode(pathGetTableName);if (null != nodeTitle){tab.TableName = nodeTitle.InnerText.Split(new char[1] { ' '})[0].Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");}var nodeBody = doc.GetElementbyId("pagebody");var str = nodeBody.OuterHtml;var doc1 = new HtmlDocument();doc1.LoadHtml(str);var nodeDesc = doc1.DocumentNode.SelectSingleNode(pathGetTableDesc);if (null != nodeDesc){tab.tableDescription = nodeDesc.InnerText.Split(new char[1] { ' ' })[0].Replace("\r","").Replace("\n", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");}var nodesTr = doc1.DocumentNode.SelectNodes(pathGetTd);if (nodesTr == null){return tab;}List<TabFieldInfo> lists = new List<TabFieldInfo>();for (var i = 1; i < nodesTr.Count(); i++){var childs = nodesTr[i].ChildNodes;if (childs == null){continue;}TabFieldInfo fi = new TabFieldInfo();if (childs.Count <= 5){continue;}fi.ColumnName = childs[1].ChildNodes[1].InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");fi.Description = childs[2].InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");fi.Datatype = childs[3].InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");fi.Length = childs[4].InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");fi.AllowNulls = childs[5].InnerText.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");lists.Add(fi);}tab.fields = lists;return tab;}这里还出现一个问题,“指定的路径不合法”,原因是,我直接点击文件右键-》属性-》安全 把那里的文件路经复制到代码上去了,其实这样复制,会造成路径字符串最开始的地方有个特殊字符,在vs里是隐藏的,后来我就复制地址栏上的路径,就没问题了。
最后,需要完善的是,通过读取目录,把目录中的所有html结尾的文件遍历,并过滤出需要的表,在构建对象。
以上就是c# 提取文档信息的示例的详细内容,更多关于c# 提取文档信息的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
概述为文档添加必要的批注可以给文档使用者提供重要的提示信息,下面的示例中,将介绍通过C#编程语言来给Excel表格中的指定单元格内容添加批注,此外,对于已有的批
usingWord;下面的例子中包括C#对Word文档的创建、插入表格、设置样式等操作:(例子中代码有些涉及数据信息部分被省略,重要是介绍一些C#操作word文
官方提供了curl、post、php、ruby的实现示例,并没有C#的官方示例。既然提供了post的方式,那么就可以用C#实现,下面是实现代码:ASP.net百
本文实例为大家分享了C#操作INI配置文件示例的具体代码,供大家参考,具体内容如下源文件地址:C#操作INI配置文件示例创建如图所示的控件:源代码:usingS
本文介绍通过C#和VB.NET程序代码来创建和编辑PPT文档中的SmartArt图形。文中将分两个操作示例来演示创建和编辑结果。使用工具:Spire.Prese