调用OuterHtml时HtmlAgilityPack抛出StackOverflow异常求助
问题原因
问题出在你用静态方法HtmlNode.CreateNode创建的tbody节点不属于当前的HtmlDocument实例——虽然通过AppendChild把它加到了table里,但节点内部的文档关联属性没同步好,生成OuterHtml时触发了无限递归,最后抛出StackOverflow异常。
解决方法
换成当前文档实例的CreateElement方法创建节点,确保所有节点都属于同一个文档上下文,就能正常生成预期的HTML:
var doc = new HtmlDocument(); var table = doc.CreateElement("table"); var tbody = doc.CreateElement("tbody"); table.AppendChild(tbody); doc.DocumentNode.AppendChild(table); var s = doc.DocumentNode.OuterHtml; // 返回<table><tbody></tbody></table>
如果一定要用HtmlNode.CreateNode,手动给节点设置OwnerDocument属性也能解决:
var doc = new HtmlDocument(); var table = HtmlNode.CreateNode("table"); table.OwnerDocument = doc; var tbody = HtmlNode.CreateNode("tbody"); tbody.OwnerDocument = doc; table.AppendChild(tbody); doc.DocumentNode.AppendChild(table); var s = doc.DocumentNode.OuterHtml;
内容的提问来源于stack exchange,提问作者MyDaftQuestions
相关产品推荐
相关产品推荐

