MemoryStream에서 HtmlDocument로드

c# html-agility-pack

문제

여러 HtmlDocument 형식에 의해 사용되는 스트림이 있지만 Stream.CanSeek false이므로 한 번 스트림을 다른 스트림으로 전달하여 다른 HtmlDocument 개체에로드 할 수 없습니다.

나는 스트림을 MemoryStream 복사 한 다음 메모리 스트림을 각 HtmlDcoument 전달할 수 있다고 생각했지만 document.Load(memoryStream) 호출하면 document.DocumentNode 가 null입니다.

뭐라 구요?

private HtmlNode getNode(MemoryStream stream) {
    var document = new HtmlDocument();
    document.Load(stream);
    return document.DocumentNode.SelectSingleNode("html/head");
}

수락 된 답변

동일한 데이터를 여러 번로드하는 이유는 무엇입니까? html을 문서에 한 번로드 한 다음 동일한 문서 인스턴스를 사용하여 필요한 모든 데이터를 파싱합니다.

귀하의 방법으로 문서를 수락하십시오 :

private HtmlNode getNode(HtmlDocument document) 
{
    return document.DocumentNode.SelectSingleNode("html/head");
}

그리고 어디에서나 단일 문서 인스턴스를 전달합니다.

var document = new HtmlDocument();
document.Load(stream);
var node1 = getNode(document);
var node2 = getOtherNode(document);

또는 문서가 클래스 필드가 될 클래스를 만드는 것을 고려해보십시오. 따라서 각 메소드에 전달할 필요가 없습니다.



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