C# HTML敏捷包-如何在Head元素的顶部添加元素?

C# HTML敏捷包-如何在Head元素的顶部添加元素?,c#,.net,asp.net-mvc-2,html-agility-pack,C#,.net,Asp.net Mvc 2,Html Agility Pack,我正在尝试使用HTML Agility Pack将脚本元素附加到HTML头部的顶部。到目前为止,我看到的示例只是使用AppendChild(element)方法来实现这一点。我需要将附加到head部分的脚本放在其他脚本之前。我如何指定这一点 以下是我正在尝试的: HtmlDocument htmlDocument = new HtmlDocument(); htmlDocument.Load(filePath); HtmlNode head = htmlDocument.DocumentNode

我正在尝试使用HTML Agility Pack将脚本元素附加到HTML头部的顶部。到目前为止,我看到的示例只是使用
AppendChild(element)
方法来实现这一点。我需要将附加到head部分的脚本放在其他脚本之前。我如何指定这一点

以下是我正在尝试的:

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.Load(filePath);
HtmlNode head = htmlDocument.DocumentNode.SelectSingleNode("/html/head");
HtmlNode stateScript = htmlDocument.CreateElement("script");
head.AppendChild(stateScript);
stateScript.SetAttributeValue("id", "applicationState");
stateScript.InnerHtml = "'{\"uid\":\"testUser\"}'";
我希望脚本标记添加到头部顶部,而不是附加在末尾。

明白了

HtmlNode具有以下方法:

HtmlNode.InsertBefore(node, refNode)
HtmlNode.InsertAfter(nodeToAdd, refNode)

意识到这是一个老问题,也有可能在子元素前面加上当时可能不存在的前缀

// Load content as new Html document
HtmlDocument html = new HtmlDocument();
html.LoadHtml(oldContent);

// Wrapper acts as a root element
string newContent = "<div>" + someHtml + "</div>";

// Create new node from newcontent
HtmlNode newNode = HtmlNode.CreateNode(newContent);

// Get body node
HtmlNode body = html.DocumentNode.SelectSingleNode("//body");

// Add new node as first child of body
body.PrependChild(newNode);

// Get contents with new node
string contents = html.DocumentNode.InnerHtml;
//将内容作为新的Html文档加载
HtmlDocument html=新的HtmlDocument();
LoadHtml(oldContent);
//包装器充当根元素
字符串newContent=“”+someHtml+”;
//从newcontent创建新节点
HtmlNode newNode=HtmlNode.CreateNode(newContent);
//获取身体节点
HtmlNode body=html.DocumentNode.SelectSingleNode(“//body”);
//添加新节点作为主体的第一个子节点
body.PrependChild(newNode);
//使用新节点获取内容
字符串内容=html.DocumentNode.InnerHtml;

修改HTML源代码时要小心。它可以更改HTML代码中可能您不想触及的其他部分::旁注:其他人发现这个问题:
stateScript.InnerHtml=…
有时会对您的javascript产生奇怪的影响。要解决这个问题,您可以改为执行
stateScript.AppendChild(htmlDocument.CreateTextNode(scriptText))