最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 提取文檔信息的示例

 更新時間:2021年02月25日 14:29:59   作者:HelloLLLLL  
這篇文章主要介紹了c# 提取文檔信息的示例,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下

事情時這樣,有用友u8的字典數(shù)據(jù)的幫助文檔一份,同事需要把里面的很多張表的字典信息給提取出來,然后構(gòu)成sql語句,插入數(shù)據(jù)庫。字典就是一張對表里的字段的一個說明,長這樣

同事一開始是手動復(fù)制到excel文檔在改的,他問我有沒有什么簡單的辦法,所以我就決定用代碼去實現(xiàn),把表格、表名等一些有效數(shù)據(jù)構(gòu)成對象,有了一個對象就好寫sql了。

首先,我在百度上搜索,發(fā)現(xiàn)這個chm幫助文檔能被反編譯成html,經(jīng)過一番操作,使用windows自帶的工具 hh.exe 就可以實現(xiàn)幫助文檔的反編譯。運行cmd,直接輸入命令就行,具體命令是這樣:

hh -decompile d:\test\help help.chm

d:\test\help是反編譯后的目錄。

反編譯之后,就會得到具體的html文檔,和js、css,長這樣:

test目錄是我自己建的。

后面就是查看html源碼,分析出關(guān)鍵信息的xPath路徑該怎么寫,因為這里我用到了.net的一款工具專門對html操作的,叫做:HtmlAgilityPack,我的翻譯是:html敏捷開發(fā)包,寫xpath比寫正則來的容易,這個包能很好的操作html的節(jié)點,獲取html、innertext、屬性。

貼上我的關(guān)鍵方法:

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;
        }

這里還出現(xiàn)一個問題,“指定的路徑不合法”,原因是,我直接點擊文件右鍵-》屬性-》安全 把那里的文件路經(jīng)復(fù)制到代碼上去了,其實這樣復(fù)制,會造成路徑字符串最開始的地方有個特殊字符,在vs里是隱藏的,后來我就復(fù)制地址欄上的路徑,就沒問題了。

最后,需要完善的是,通過讀取目錄,把目錄中的所有html結(jié)尾的文件遍歷,并過濾出需要的表,在構(gòu)建對象。

以上就是c# 提取文檔信息的示例的詳細內(nèi)容,更多關(guān)于c# 提取文檔信息的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#數(shù)據(jù)結(jié)構(gòu)之雙向鏈表(DbLinkList)實例詳解

    C#數(shù)據(jù)結(jié)構(gòu)之雙向鏈表(DbLinkList)實例詳解

    這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之雙向鏈表(DbLinkList),結(jié)合實例形式較為詳細的講解了雙向鏈表的概念及C#實現(xiàn)雙向鏈表的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 解決C#獲取鼠標相對當前窗口坐標的實現(xiàn)方法

    解決C#獲取鼠標相對當前窗口坐標的實現(xiàn)方法

    本篇文章是對在C#中獲取鼠標相對當前窗口坐標的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C# 運用params修飾符來實現(xiàn)變長參數(shù)傳遞的方法

    C# 運用params修飾符來實現(xiàn)變長參數(shù)傳遞的方法

    一般來說,參數(shù)個數(shù)都是固定的,定義為集群類型的參數(shù)可以實現(xiàn)可變數(shù)目參數(shù)的目的,但是.NET提供了更靈活的機制來實現(xiàn)可變數(shù)目參數(shù),這就是使用params修飾符
    2013-09-09
  • C#中backgroundWorker類的用法詳解

    C#中backgroundWorker類的用法詳解

    這篇文章主要介紹了C#使用backgroundWorker實現(xiàn)多線程的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C# TreeView控件使用代碼

    C# TreeView控件使用代碼

    TreeView控件的實例代碼,需要的朋友可以參考下。
    2009-09-09
  • C#中Socket通信編程的異步實現(xiàn)流程分析

    C#中Socket通信編程的異步實現(xiàn)流程分析

    Socket編程的異步實現(xiàn)是指按照異步過程來實現(xiàn)Socket編程,即在完成了一次調(diào)用后通過狀態(tài)、通知和回調(diào)來告知調(diào)用者,本文給大家介紹C#中Socket通信編程的異步實現(xiàn)流程分析,感興趣的朋友一起看看吧
    2024-12-12
  • C#中的集合用法分析

    C#中的集合用法分析

    這篇文章主要介紹了C#中的集合用法,實例形式分析了集合元素的定義、賦值、插入、移除等操作,需要的朋友可以參考下
    2014-10-10
  • .NET平臺的一種方便快捷的服務(wù)注冊方案

    .NET平臺的一種方便快捷的服務(wù)注冊方案

    這篇文章主要介紹了.NET平臺的一種方便快捷的服務(wù)注冊方案的相關(guān)資料,需要的朋友可以參考下
    2023-08-08
  • C#中線程安全問題的調(diào)試和解決

    C#中線程安全問題的調(diào)試和解決

    在C#中,多線程編程是一種常見且強大的工具,但它帶來了線程安全的問題,本文將介紹如何調(diào)試和解決C#中的線程安全問題,并深入探討鎖機制、并發(fā)控制以及調(diào)試的最佳實踐,需要的朋友可以參考下
    2025-03-03
  • C#線程委托BeginInvoke與EndInvoke的用法

    C#線程委托BeginInvoke與EndInvoke的用法

    這篇文章介紹了C#線程委托BeginInvoke與EndInvoke的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07

最新評論

溧阳市| 外汇| 玉田县| 阳原县| 安庆市| 息烽县| 佛坪县| 阿克苏市| 临海市| 滁州市| 宜阳县| 吕梁市| 中卫市| 龙门县| 安福县| 邢台市| 台南市| 贞丰县| 南召县| 朔州市| 防城港市| 海阳市| 正蓝旗| 柳州市| 阿城市| 东兴市| 贡山| 惠安县| 丁青县| 鄂托克前旗| 称多县| 宿州市| 罗田县| 通化县| 乐陵市| 文昌市| 南汇区| 博爱县| 渭源县| 宁夏| 正阳县|