c\#문서 정 보 를 추출 하 는 예제

일 을 할 때 이렇게 하면 친구 u8 의 사전 데이터 에 대한 도움말 문서 가 있 습 니 다.동 료 는 안에 있 는 많은 표 의 사전 정 보 를 추출 한 다음 에 sql 문 구 를 구성 하여 데이터 베 이 스 를 삽입 해 야 합 니 다.사전 은 표 의 필드 에 대한 설명 이다.이렇게 생 겼 다.

동 료 는 처음에 엑셀 문 서 를 수 동 으로 복사 하여 고 쳤 다.그 는 나 에 게 간단 한 방법 이 있 느 냐 고 물 었 기 때문에 나 는 코드 로 실현 하기 로 결정 했다.표,표 이름 등 효과 적 인 데이터 구성 대상 을 대상 으로 한 대상 이 있 으 면 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 작업 을 전문 적 으로 하 는 것 입 니 다.HtmlAgility Pack 이 라 고 합 니 다.제 번역 은 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
");             }             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("
", "").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("
", "").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("
", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");                 fi.Description = childs[2].InnerText.Replace("\r", "").Replace("
", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");                 fi.Datatype = childs[3].InnerText.Replace("\r", "").Replace("
", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");                 fi.Length = childs[4].InnerText.Replace("\r", "").Replace("
", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");                 fi.AllowNulls = childs[5].InnerText.Replace("\r", "").Replace("
", "").Replace("\t", "").Replace("&", "").Replace("nbsp;", "");                   lists.Add(fi);             }             tab.fields = lists;               return tab;         }
여기에 또 하나의 문제 가 발생 했다.'지정 한 경로 가 합 법 적 이지 않다'는 이 유 는 내 가 직접 파일 오른쪽 단 추 를 눌 렀 기 때문이다.속성-'은 그곳 의 파일 경 로 를 코드 에 안전하게 복사 했다.사실은 이렇게 복사 하면 경로 문자열 이 처음에 특수 문자 가 있 고 vs 에 숨겨 져 있 기 때문이다.나중에 나 는 주소 표시 줄 의 경 로 를 복사 하면 문제 가 없다.
마지막 으로 디 렉 터 리 를 읽 고 디 렉 터 리 의 모든 html 끝 에 있 는 파일 을 옮 겨 다 니 며 필요 한 시 계 를 걸 러 내 구축 대상 에 있 습 니 다.
이상 은 c\#문서 정 보 를 추출 하 는 예제 의 상세 한 내용 입 니 다.c\#문서 정 보 를 추출 하 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기