Html 민첩성 팩 InnerHtml은 텍스트 상자에 잘못된 문자열을 반환합니다.

html-agility-pack innerhtml

문제

다음 테스트 코드 :

[Test]
public void PossibleHtmlAgilityPackBug()
{
    const string html = @"<input type=""text"" name=""shouldNotTrim"" />";
    var doc = new HtmlDocument();
    doc.LoadHtml(html);

    Assert.That(doc.DocumentNode.InnerHtml, Is.EqualTo(html));
}

결과 :

Expected string length 42 but was 40. Strings differ at index 39.
Expected: "<input type="text" name="shouldNotTrim" />"
But was:  "<input type="text" name="shouldNotTrim">"
--------------------------------------------------^

이거 버그 야? 또는 내가 필요로하는 추가 "/"출력으로 변경할 수있는 설정이 있습니까?

감사,

수락 된 답변

이것은 버그가 아닙니다. INPUT은 파서에 의해 "비어있는"요소로 간주됩니다 (예 : HTMLAgilityPack은 빈 요소를 빈 요소로 유지하지 않음 ). 기본적으로 이러한 요소는 닫히지 않고 렌더링됩니다.

이유는 HTML 3.2와 역사적으로 관련이 있습니다. 그 당시의 INPUT은 오늘날 버그처럼 보일지라도 폐쇄 될 필요가 없었습니다.

이렇게하면 문제가 해결됩니다.

public void PossibleHtmlAgilityPackBug()
{
    const string html = @"<input type=""text"" name=""shouldNotTrim"" />";
    var doc = new HtmlDocument();
    doc.OptionWriteEmptyNodes = true;
    doc.LoadHtml(html);

    Assert.That(doc.DocumentNode.InnerHtml, Is.EqualTo(html));
}

부가 기능으로, HTML 민첩성 팩은 항상 HTML 텍스트 와 정확히 일치하는 것은 아니지만, 항상 같은 방식으로 렌더링 될 내용을 다시 작성하려고 시도합니다. 브라우저는 문제없이 닫히지 않은 INPUT을 지원합니다.




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