c\#문서 정 보 를 추출 하 는 예제
동 료 는 처음에 엑셀 문 서 를 수 동 으로 복사 하여 고 쳤 다.그 는 나 에 게 간단 한 방법 이 있 느 냐 고 물 었 기 때문에 나 는 코드 로 실현 하기 로 결정 했다.표,표 이름 등 효과 적 인 데이터 구성 대상 을 대상 으로 한 대상 이 있 으 면 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\#문서 정 보 를 추출 하 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.