문제

내가 사용하 HtmlAgilityPack.내가 만드는 HtmlDocument 및 LoadHtml 다음과 같은 문자열:

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One</option><option value="2">Two</option></select>

이것은 예상치 못한 것들입니다.첫째로,그것은 두기 때문에,EndTagNotRequired.둘째,노드를 선택하는 4 개의 아이들-두 개의 옵션에 대한 태그와 두 개 더에 대한 내부에 텍스트의 옵션은 태그가 있습니다.마지막으로,OuterHtml 는 다음과 같습니다:

<select id="foo_Bar" name="foo.Bar"><option selected="selected" value="1">One<option value="2">Two</select>

그래서 기본적으로 결정한 날을 드롭 폐 태그에서 옵션이 있습니다.Let's 고 잠시 그것은 여부를 적절하고 수행하는 것이 바람직하다.내가 사용하 HtmlAgilityPack 테스트 HTML 세대 코드,그래서 나는 그것을 원하지 않는 모든 결정한 날 또는 어떠한 오류하지 않는 한 HTML 가 진정한 형식이 잘못되었습니다.는 몇 가지 방법이 있게 행동하는 방법을 내가 원하는가?나는 설정의 일부에 대한 옵션을 HtmlDocument,특별히:

 doc.OptionAutoCloseOnEnd = false;
 doc.OptionCheckSyntax = false;
 doc.OptionFixNestedTags = false;

이것은 작동하지 않습니다.는 경우 HtmlAgilityPack 할 수 없는 내가 원하는 것을 추천할 수 있는 뭔가 할 수 있습니까?

도움이 되었습니까?

해결책

똑같은 오류가 보고에 HAP 홈 페이지의 토론이지만,그것은 다음과 같이 아무 의미 있는 수정되었습 프로젝트에서 몇 년이다.로 장려하지 않습니다.

빠른 검색을의 원본을 제시 오류 수정 가능한 주석으로 처리하여 선 92 의 HtmlNode.cs:

// they sometimes contain, and sometimes they don 't...
ElementsFlags.Add("option", HtmlElementFlag.Empty);

(실제는 없다,그들은 항상 포함하는 레이블,텍스트,하지만 빈 문자열 또한 유효한 텍스트입니다.부 저자는 생략할 수 있습 끝 태그가 아니지만 다음의 어떤 요소입니다.)

추가

해당하는 솔루션입 통화 HtmlNode.ElementsFlags.Remove("option"); 하기 전에 사용되는 모든 liberary(없이 수정할 필요가 liberary 소스 코드)

다른 팁

XHTML 준수를 위해 옵션 태그를 "일반적인"태그로 구문 분석하지 않는 이유가있는 것 같습니다. 그러나 이것은 목에 진정한 통증이 될 수 있습니다.

내 제안은 전체 문자열 자리를 수행하고 모든 "옵션"태그를 "my_option"태그로 변경하는 것입니다.

  1. 라이브러리 소스를 수정할 필요가 없으며 나중에 업그레이드 할 수 있습니다).
  2. 평소처럼 구문 분석 할 수 있습니다.

htmlagilitypack 포럼의 원래 게시물은 다음에서 찾을 수 있습니다.http://htmlagilitypack.codeplex.com/thread/view.aspx?threadid=14982

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top