C# Htmlagibility Html节点未按正确顺序显示

C# Htmlagibility Html节点未按正确顺序显示,c#,asp.net-mvc,html-agility-pack,C#,Asp.net Mvc,Html Agility Pack,我一直在玩弄HTMLAgility,但没有用,HTML的结构没有正确显示 这是我试图阅读的HTML(简化) … 如您所见,它丢失了 以下是我目前掌握的代码: HtmlDocument html = new HtmlDocument(); html.LoadHtml(HttpUtility.HtmlDecode(str_html)); //check if <html> exists. If not create <html> var htmlNode = html.Do

我一直在玩弄HTMLAgility,但没有用,HTML的结构没有正确显示

这是我试图阅读的HTML(简化)

如您所见,它丢失了

以下是我目前掌握的代码:

HtmlDocument html = new HtmlDocument();
html.LoadHtml(HttpUtility.HtmlDecode(str_html));

//check if <html> exists. If not create <html>
var htmlNode = html.DocumentNode.SelectSingleNode("//html");
if (htmlNode == null)
{
    htmlNode = html.CreateElement("html");
    var htmlCollection = html.DocumentNode.ChildNodes;
    htmlNode.AppendChildren(htmlCollection);
    html.DocumentNode.RemoveAllChildren();
    html.DocumentNode.PrependChild(htmlNode);
}

//check if <head> exists, if not create <head>
HtmlNode head = html.DocumentNode.SelectSingleNode("//head");
HtmlNode cssLink = html.DocumentNode.SelectSingleNode("//link[contains(@href, '/assets/global/css/reset.css')]");
if (head != null)
{
    //if <link> does not exist, create <link> to reset.css
    if (cssLink == null)
    {
        cssLink = html.CreateElement("link");
        cssLink.SetAttributeValue("rel", "stylesheet");
        cssLink.SetAttributeValue("href", Url.Content("/assets/global/css/reset.css"));
        head.AppendChild(cssLink);
    }
}
else
{
    //
    var htmlNode2 = html.DocumentNode.SelectSingleNode("//html");
    head = html.CreateElement("head");
    var htmlCollection = html.DocumentNode.ChildNodes;
    html.DocumentNode.InnerHtml(head);

    if (cssLink == null)
    {
        cssLink = html.CreateElement("link");
        cssLink.SetAttributeValue("rel", "stylesheet");
        cssLink.SetAttributeValue("href", Url.Content("/assets/global/css/reset.css"));
        head.AppendChild(cssLink);
    }
}

//check if <body> exists, if yes, add style='margin:0; padding:0'
HtmlNode htmlBody = html.DocumentNode.SelectSingleNode("//body");
if (htmlBody != null)
    htmlBody.SetAttributeValue("style", "margin: 0; padding: 0;");

//remove <script> and <iframe> references
html.DocumentNode.Descendants()
                .Where(n => n.Name == "script" || n.Name == "iframe")
                .ToList()
                .ForEach(n => n.Remove());

str_html = html.DocumentNode.OuterHtml;
HtmlDocument html=新的HtmlDocument();
LoadHtml(HttpUtility.HtmlDecode(str_html));
//检查是否存在。如果没有创建
var htmlNode=html.DocumentNode.SelectSingleNode(“//html”);
if(htmlNode==null)
{
htmlNode=html.CreateElement(“html”);
var htmlCollection=html.DocumentNode.ChildNodes;
htmlNode.AppendChildren(htmlCollection);
html.DocumentNode.RemoveAllChildren();
html.DocumentNode.PrependChild(htmlNode);
}
//检查是否存在,如果不存在,则创建
HtmlNode head=html.DocumentNode.SelectSingleNode(“//head”);
HtmlNode cssLink=html.DocumentNode.SelectSingleNode(//link[contains(@href,'/assets/global/css/reset.css'))”;
if(head!=null)
{
//如果不存在,请创建reset.css
如果(cssLink==null)
{
cssLink=html.CreateElement(“链接”);
cssLink.SetAttributeValue(“rel”,“样式表”);
cssLink.SetAttributeValue(“href”,Url.Content(“/assets/global/css/reset.css”);
头、子(cssLink);
}
}
其他的
{
//
var htmlNode2=html.DocumentNode.SelectSingleNode(“//html”);
head=html.CreateElement(“head”);
var htmlCollection=html.DocumentNode.ChildNodes;
html.DocumentNode.InnerHtml(head);
如果(cssLink==null)
{
cssLink=html.CreateElement(“链接”);
cssLink.SetAttributeValue(“rel”,“样式表”);
cssLink.SetAttributeValue(“href”,Url.Content(“/assets/global/css/reset.css”);
头、子(cssLink);
}
}
//检查是否存在,如果存在,则添加style='margin:0;填充:0'
HtmlNode htmlBody=html.DocumentNode.SelectSingleNode(“//正文”);
if(htmlBody!=null)
SetAttributeValue(“样式”,“边距:0;填充:0;”);
//删除和删除引用
html.DocumentNode.subjects()
.Where(n=>n.Name==“script”| | n.Name==“iframe”)
托利斯先生()
.ForEach(n=>n.Remove());
str_html=html.DocumentNode.OuterHtml;
以下是输出:


…您可以尝试将
作为
的子级进行前置,例如(为了清晰起见,删除了不相关的代码):

var str_html=“…”;
.....
if(head!=null)
{
.....
}
其他的
{
head=html.CreateElement(“head”);
var htmlCollection=html.DocumentNode.ChildNodes;
htmlNode.PrependChild(head);//我只在现有代码中添加了这一行
如果(cssLink==null)
{
cssLink=html.CreateElement(“链接”);
cssLink.SetAttributeValue(“rel”,“样式表”);
cssLink.SetAttributeValue(“href”,Url.Content(“/assets/global/css/reset.css”);
头、子(cssLink);
}
}
并且输出顺序正确:

<html><head><link rel="stylesheet" href="/assets/global/css/reset.css"></head><table>...</table></html>
。。。

您的问题不完整。它缺少输出,至少还有一件事。哇。。。我就是这样一个丁冬。是的,它修好了。非常感谢你!
<html><head><link rel="stylesheet" href="/assets/global/css/reset.css"></head><table>...</table></html>