从 InnerHtml 手动创建 HtmlDocument.DocumentNode returns null
Manualy created HtmlDocument.DocumentNode returns null from InnerHtml
尝试从代码手动构建 HTML。代码,构建 html:
public string ParseFromRoot(RootItem root)
{
if (root == null || root.Children.Count == 0)
return string.Empty;
var document = new HtmlDocument();
foreach (var item in root.Children)
ParseNode(document, document.DocumentNode, item);
return document.DocumentNode.InnerHtml;
}
private HtmlNode ParseNode(HtmlDocument document, HtmlNode parentNode, ItemBase item)
{
var node = DefineNode(document, item);
parentNode.ChildNodes.Add(node);
if (item.Children.Count == 0)
return node;
foreach (var child in item.Children)
ParseNode(document, node, child);
return node;
}
在那种情况下,在准备好的文档中,我在尝试访问 document.DocumentNode.InnerHtml
时得到了 Null 引用。但是 InnerText 反映了实际的文本,一切都好吗?
万一我document.LoadHtml("")一样html,document.DocumentNode.InnerHtml
returns真的html无一例外?
html:
<p>dsgwegsdrgsrdeg</p>
<p> </p>
<p>just <strong>typihere</strong></p>
<p> </p>
<ol>
<li>some list</li>
<li>another list</li>
</ol>
<p>j</p>
问题出在这一行:
parentNode.ChildNodes.Add(node);
我们需要将其替换为
parentNode.AppendChild(node);
尝试从代码手动构建 HTML。代码,构建 html:
public string ParseFromRoot(RootItem root)
{
if (root == null || root.Children.Count == 0)
return string.Empty;
var document = new HtmlDocument();
foreach (var item in root.Children)
ParseNode(document, document.DocumentNode, item);
return document.DocumentNode.InnerHtml;
}
private HtmlNode ParseNode(HtmlDocument document, HtmlNode parentNode, ItemBase item)
{
var node = DefineNode(document, item);
parentNode.ChildNodes.Add(node);
if (item.Children.Count == 0)
return node;
foreach (var child in item.Children)
ParseNode(document, node, child);
return node;
}
在那种情况下,在准备好的文档中,我在尝试访问 document.DocumentNode.InnerHtml
时得到了 Null 引用。但是 InnerText 反映了实际的文本,一切都好吗?
万一我document.LoadHtml("")一样html,document.DocumentNode.InnerHtml
returns真的html无一例外?
html:
<p>dsgwegsdrgsrdeg</p>
<p> </p>
<p>just <strong>typihere</strong></p>
<p> </p>
<ol>
<li>some list</li>
<li>another list</li>
</ol>
<p>j</p>
问题出在这一行:
parentNode.ChildNodes.Add(node);
我们需要将其替换为
parentNode.AppendChild(node);