여러 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);
또는 문서가 클래스 필드가 될 클래스를 만드는 것을 고려해보십시오. 따라서 각 메소드에 전달할 필요가 없습니다.