2016-11-03 2 views
6

현재 문서는 말한다 :HtmlAgilityPack : 누군가 HtmlDocument OptionAutoCloseOnEnd를 true로 설정했을 때의 효과를 정확히 설명해 주실 수 있습니까?

정의 비 폐쇄 노드에 대해 폐쇄가 마지막에 직접 문서에 수행해야합니다. 이것을 true로 설정하면 실제로 브라우저가 페이지를 렌더링하는 방법을 변경할 수 있습니다. 기본값은 false입니다.

죄송합니다.이 단락을 이해할 수 없습니다. 구체적으로 "끝에서"무엇을? "문서에서"정확히 무엇을 의미합니까? 마지막 하나의 구절은 불길하게 들립니다. 이 옵션이 true로 설정되어 있고 html이 제대로 포맷되어 있다면 여전히 문서에 영향을 미칩니 까?

소스 코드를 살펴 봤지만 무슨 일이 일어 났는지 이해하지 못했습니다. 코드가 true로 설정되지 않은 속성에 반응합니다. HtmlNode.cs을보고 OptionAutoCloseOnEnd- 라인 1707을 검색하십시오. HtmlWeb.cs 1113과 1154에 펑키 코드가 있습니다. 소스 코드 브라우저에 줄 번호가 표시되지 않지만 페이지에서 OptionAutoCloseOnEnd를 검색하십시오.

이 옵션의 기능에 대한 예를 들어 설명해주십시오.

일부 html을 수정하고 페이지 콘텐츠를 xml로 내보내려면 HtmlAgilityPack을 사용하고 있습니다.

형식이 잘못된 HTML 겹치는 태그가 나타납니다. 스 니펫은 다음과 같습니다.

<p>Blah bah 
<P><STRONG>Some Text</STRONG><STRONG></p> 
<UL> 
<LI></STRONG>Item 1.</LI> 
<LI>Item 2</LI> 
<LI>Item 3</LI></UL> 

첫 번째 p 태그가 닫히지 않고 겹치는 STRONG 태그가 있음을 유의하십시오.

OptionAutoCloseOnEnd를 설정하면 어떻게 든 고쳐집니다. 이 속성을 문서의 구조에서 일반적으로 true로 설정하는 효과가 정확히 무엇인지 이해하려고합니다.

HtmlDocument doc = new HtmlDocument(); 
doc.OptionOutputAsXml = true; 
doc.OptionFixNestedTags = true;  
// doc.OptionAutoCloseOnEnd = true;  
doc.LoadHtml(htmlText); 

감사합니다 :

여기 내가 사용하고 C# 코드입니다!

답변

3

현재 코드는 항상 부모 노드가 닫히기 전에 닫혀 있지 않은 노드를 닫습니다.그래서 다음 코드

var doc = new HtmlDocument(); 
doc.LoadHtml("<x>hello<y>world</x>"); 
doc.Save(Console.Out); 

가 출력이 원래, 옵션 세트가,이를 생산할 수있을 예정이었다

<x>hello<y>world</y></x> 

(닫히지 않은 <y><x>가 닫혀 부모를 닫기 직전에) 대신 (안 XML 출력 유형) : 문서의 끝에 닫는 <y> 세트

<x>hello<y>world</x></y> 

(즉,이 "종료"무슨 뜻 에스). 이 경우에도 겹치는 요소를 얻을 수 있습니다.

과거에 어딘가에서 깨진이 기능 (아마도 쓸모가 없다는 것을 인정할 수 있음)은 이유를 알지 못합니다.

참고 <p> 태그 케이스는 기본적으로 맞춤 HtmlElementFlag에 의해 관리되므로 특별합니다. HtmlNode.cs에서 선언 된 방법입니다.

ElementsFlags.Add("p", HtmlElementFlag.Empty | HtmlElementFlag.Closed); 
+0

감사합니다. OptionAutoCloseOnEnd = false 일 때 다른 형제 p를 찾거나 부모가 닫힐 때만 닫히지 않은 p가 닫힙니 까? 코드에서 특정 태그를 구별합니까? 또한 여는 태그가없는 닫는 태그가 발견되면 어떻게됩니까? 버려 졌습니까? – costa

+0

예 해당하는 첫 번째 여백을 제외하고는 닫는 태그가 삭제됩니다 (오류가 발생할 수 있음). 태그는 HtmlNode.cs에 정의 된 ElementFlags와 관련하여 특별한 방법으로 만 처리됩니다. –

1

열고 필요한 프로그램 어디서나 가까운 태그 설정하는 것입니다 HtmlAgilityPack를 사용하는 더 좋은 방법 :

doc.OptionAutoCloseOnEnd = false; 

당신에게 예상되는 서식을 제공 할 것입니다.

그렇지 않으면 라이브러리는 닫히지 않은 태그가 있는지 확인하고 코드 실행 흐름에 따라 적절하다고 판단 할 때마다 태그를 닫습니다.