HtmlAgilityPack에서 하위 요소를 추가하는 방법 / 루트 요소를 추가 하시겠습니까?

c# html html-agility-pack

문제

다음과 같은 HTML 코드가 있다고 가정합니다.

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

보시다시피 html / body 태그가 없습니다. 내가하고 싶은 것은 문서의 맨 위에 html과 body 태그를 추가하는 것입니다.

다음 코드와 함께 html 태그를 추가하려고했습니다.

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

그러나 그 후 doc.DocumentNode.WriteContentTo() 호출은 <html></html> 반환합니다. 마지막 줄의 실행 순서를 변경하면 :

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

doc.DocumentNode.WriteContentTo() 다음에 System.StackOverflowException 있습니다.

가능한 해결책은 다음과 같습니다.

<p>Hello, bla-bla-bla</p>
<a href="somesite">Click here</a>

그러나 전체 문서 재분석으로 인해 효과가 없을 것입니다.

이 아이디어가 성능면에서 어떻게 해결 될 수 있는지, 어떤 아이디어가 있습니까?

수락 된 답변

마지막으로, 나는 그것을 작동 시켰습니다. doc.DocumentNode.ChildNodesHtmlNodeCollection 의 복사본이 아니라 노드 컬렉션 자체를 반환하기 때문에 첫 번째 샘플이 작동하지 않았습니다. 이로 인해 콜렉션의 모든 노드가 el 추가되기 전에 삭제되었습니다. 아래의 코드는 트릭을 수행합니다.

var el = doc.CreateElement("html");
var nodes = doc.DocumentNode.ChildNodes;
el.AppendChildren(nodes);    
doc.DocumentNode.RemoveAllChildren();
doc.DocumentNode.AppendChild(el);  



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