如何在html输出中找到结束标头

时间:2012-02-25 09:24:34

标签: c# regex string html-parsing html-agility-pack

我想从http模块中页面的html输出中找到tag的索引。 我正在使用

HTMLOutput.IndexOf("</head>");

其中HTMLOutput是字符串参数,它包含特定页面的整个html输出。 使用上面提到的方法,我能够找到结束头标记的索引,但只有当它是唯一的结束头标记时,当页面中有一些javascript函数插入一些动态html内容并包含一些结束标记时出现问题在其中,例如,

newWindow.document.writeln('</head>')

以及页面中是否有一些注释行由其中包含的某些第三方工具添加。

所以我无法找到原始标记的索引,是否有人知道如何解决这个问题可能是一些正则表达式,或者可以帮助我解决这个问题。

谢谢, MAC

2 个答案:

答案 0 :(得分:3)

您可以使用Html Agility Pack查找<head>标记,然后在其中注入<script>元素:

var doc = new HtmlDocument();
doc.LoadHtml(HTMLOutput);
var head = doc.DocumentNode.SelectSingleNode("//head");
head.AppendChild(HtmlNode.CreateNode("<script>...</script>"));

要获得结果HTML,您可以使用:

using (StringWriter writer = new StringWriter())
{
    doc.Save(writer);
    HTMLOutput = writer.ToString();
}

现在HTMLOutput变量包含修改过的HTML。

答案 1 :(得分:1)

如果您可以确保所有javascript代码都在标记中,那么您可以使用

HTMLOutput.LastIndexOf("</head>");

但更好的方法是使用“ HTMLAgilityPack ”并解析您的内容。