HtmlAgilityPack loadhtml에서 '미만'기호 손실

c# html html-agility-pack

문제

나는 최근에 HtmlAgilityPack을 실험하기 시작했습니다. 나는 모든 옵션에 익숙하지 않아서 뭔가 잘못하고 있다고 생각합니다.

다음 내용이 포함 된 문자열이 있습니다.

string s = "<span style=\"color: #0000FF;\"><</span>";

내 스팬에는 '미만'표시가 있습니다. 다음 코드를 사용하여이 문자열을 처리합니다.

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(s);

그러나 내가 이렇게 짧고 더러운 모습을 할 때 :

htmlDocument.DocumentNode.ChildNodes[0].InnerHtml

스팬이 비어 있음을 알 수 있습니다.

어떤 옵션을 설정해야합니까 '이하'기호를 유지합니다. 나는 이미 이것을 시도했다.

htmlDocument.OptionAutoCloseOnEnd = false;
htmlDocument.OptionCheckSyntax = false;
htmlDocument.OptionFixNestedTags = false;

그러나 성공하지 못했습니다.

잘못된 HTML이라는 것을 알고 있습니다. 나는 이것을 사용하여 잘못된 HTML을 수정하고 '미만'표지판에 HTMLEncode를 사용합니다.

저를 올바른 방향으로 인도하십시오. 미리 감사드립니다.

수락 된 답변

Html 민첩성 팩은 이것을 오류로 감지하여 HtmlParseError 인스턴스를 만듭니다. HtmlDocument 클래스의 ParseErrors를 사용하여 모든 오류를 읽을 수 있습니다. 따라서이 코드를 실행하면 다음과 같습니다.

    string s = "<span style=\"color: #0000FF;\"><</span>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(s);
    doc.Save(Console.Out);

    Console.WriteLine();
    Console.WriteLine();

    foreach (HtmlParseError err in doc.ParseErrors)
    {
        Console.WriteLine("Error");
        Console.WriteLine(" code=" + err.Code);
        Console.WriteLine(" reason=" + err.Reason);
        Console.WriteLine(" text=" + err.SourceText);
        Console.WriteLine(" line=" + err.Line);
        Console.WriteLine(" pos=" + err.StreamPosition);
        Console.WriteLine(" col=" + err.LinePosition);
    }

이것을 표시합니다 (수정 된 텍스트를 먼저 표시하고 오류에 대한 자세한 내용은 다음과 같습니다).

<span style="color: #0000FF;"></span>

Error
 code=EndTagNotRequired
 reason=End tag </> is not required
 text=<
 line=1
 pos=30
 col=31

따라서 필요한 모든 정보 (줄, 열 및 스트림 위치 포함)를 갖기 때문에이 오류를 수정하려고 시도 할 수 있지만 HTML의 오류를 수정하는 일반적인 프로세스는 매우 복잡합니다.


인기 답변

다른 답변에서 언급했듯이 내가 찾은 최선의 해결책은 HTML을 미리 구문 분석하여 고아가 된 < 기호를 HTML 인코딩 된 값으로 변환하는 것입니다 &lt; .

return Regex.Replace(html, "<(?![^<]+>)", "&lt;");


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.