2011-08-18 6 views
2

이 코드에 HTML 파일을 구문 분석 트링 오전 :HtmlAgilityPack 가까운 형태의 태그를 자동으로

<div><form>...</div>...</form> 

문제는 HtmlAgilityPack 자동으로 DIV 전에 종료 태그 형태의 태그를 닫는 것이 있습니다 : 그래서 <div><form>...</form></div>...</form> 내가 분석 일부 양식 요소가 누락되었습니다.

htmlDoc.OptionFixNestedTags = false; 
htmlDoc.OptionAutoCloseOnEnd = false; 
htmlDoc.OptionCheckSyntax = false; 
HtmlNode.ElementsFlags.Remove("form"); 
HtmlNode.ElementsFlags.Add("form", HtmlElementFlag.CanOverlap); 
HtmlNode.ElementsFlags.Add("div", HtmlElementFlag.CanOverlap); 

을하지만 아무것도 할 수 없습니다 : 이미 시도

(I은 자동으로 추가 태그을 befor 요소만을 얻을)!

도움 주셔서 감사합니다.

답변

0

프로그래밍 방식으로 텍스트를 구문 분석 한 후 수행 할 작업에 따라 다릅니다. 당신이 그것으로 다음 코드 특별한 일을하지 않으려면 :

HtmlDocument doc = new HtmlDocument(); 
    doc.LoadHtml("<div><form>form and div</div>form</form>"); 

    doc.Save(Console.Out); 

정확히 같은 문자열을 표시됩니다, 즉 :

<div><form>form and div</div>form</form> 

라이브러리를 최대 지상에서 설계되어 있으므로, 가능한 한 원본 HTML을 유지하려고합니다.

그러나 이것이 DOM에서 어떻게 표현되는지, 그리고 오류 측면에서 이것은 또 다른 이야기입니다. 같은 시간에 1) 요소가 겹칠 수 없습니다. 2) XML과 유사한 DOM (중복을 지원하지 않음)과 3) 오류가 없습니다.

그래서 구문 분석 후 원하는 작업에 따라 다릅니다.

+0

내가 양식 어린이 태그를 반복 할 필요가있다. 그래서 문제는 내가 자동으로 추가 된 태그까지 자식 태그를 모두 얻지 못한다는 것입니다. – ido

+0

@ido - hmmm ... 내가 말했듯이, 동시에 겹치는 태그와 DOM (부모/자식 관계)을 가질 수 있습니다. –

+1

글쎄, 내가하는 사이트를 파싱하고 있는데 ... 해결책이 필요하다. – ido

1

다음은 나를 위해 작동하는 것 같다 :

HtmlAgilityPack.HtmlNode.ElementsFlags.Remove("form"); 

_document = new HtmlDocument(); 
_document.OptionAutoCloseOnEnd = true; 
_document.LoadHtml(content);