如何以编程方式加载HTML文档以添加到文档的?

问题描述:

我们从客户端提供HTML'wrapper'文件,我们需要将内容插入,然后呈现HTML。如何以编程方式加载HTML文档以添加到文档的<head>?

在插入HTML内容之前,我需要在客户端的包装器的<head>部分添加一些标签,例如对脚本文件,CSS和一些元标签的引用。

所以我在做什么是

string html = File.ReadAllText(wrapperLocation, Encoding.GetEncoding("iso-8859-1")); 

,现在我有完整的HTML。然后,我在该字符串中搜索预定义的内容,然后将我们的内容插入到该字符串中,然后进行渲染。

如何创建HTML文档的实例并根据需要修改<head>部分?

编辑:我不想引用System.Windows.Forms所以WebBrowser不是一个选项。

我不能让一个自动化的解决方案这一点,所以它来到了一个黑客:

public virtual void PopulateCssTag(string tags) 
{ 
    // tags is a pre-compsed string containing all the tags I need. 
    this.Wrapper = this.Wrapper.Replace("</head>", tags + "</head>"); 
} 

我使用WebBrowser控件作为主机,并通过其Document属性导航/更改文档。

好的文档和样本在上面的链接。

+2

存在于System.Windows.Forms的,所以我并不真的太热衷于引用来自Web项目.. – DaveDev 2010-07-11 14:59:22

我还没有尝试过这个库自己,但是这可能会符合该法案:http://htmlagilitypack.codeplex.com/

+1

我这个玩了一段时间,但我无法找到一个方法来插入节点成HtmlDocument ..和HtmlAgilityPack的文档不是很好!不管怎么说,还是要谢谢你 – DaveDev 2010-07-13 15:58:20

您是否在使用MasterPages? 这似乎是他们最明显的用法。

The MasterPage has < asp:ContentPlaceHolder >的所有点你想要的内容去。

在我们的应用程序,我们有一个基本的控制器,它覆盖所有的View()重载,使得它在母版从web.config中读取名称。这样定制应用程序就像新的MasterPage一样简单,并且从控制器的角度来看,没有代码更改,因为我们的基类处理MasterPage/web.config的东西。

您可以使用https://github.com/jamietre/CsQuery来编辑HTML DOM。

var dom = CQ.Create(html); 
var dom = CQ.CreateFromUrl("http://www.jquery.com"); 

dom.Select("div > span") 
.Eq(1) 
.Text("Change the text content of the 2nd span child of each div"); 

只需选择头部并添加到它。