HTML Agility Pack替换链接

时间:2012-12-05 15:40:56

标签: c# .net html-agility-pack

我有一些使用HTML Agility Pack的代码。我想要做的是,替换html内容中的所有链接。

例如:我将替换

http://oldserver/Documents/1.pdf 

http://newserver/Documents/2.pdf

我可以枚举所有链接并可以获取它们的值但是当我执行doc.Save()时它会保存原始的html源代码。不是更新的HTML。如何从HtmlDocument获取更新的html。

private string FixHyperlinks(string contentHtml, SPWeb web)
    {
        TextReader reader = new StringReader(contentHtml);

        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.Load(reader);

        List<string> hrefTags = new List<string>();

        foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
        {
            HtmlAttribute att = link.Attributes["href"];
            att.Value = RepairHyperlinkAddress(att.Value, web);
        }

        MemoryStream memoryStream = new MemoryStream();
        doc.Save(memoryStream);
        memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
        StreamReader streamReader = new StreamReader(memoryStream);
        string result = streamReader.ReadToEnd();

        return result;
    }

1 个答案:

答案 0 :(得分:2)

这应该更好:

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
        {
            HtmlAttribute att = link.Attributes["href"];
            att.Value = RepairHyperlinkAddress(att.Value, web);
        }

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//img[@src]"))
        {
            HtmlAttribute att = link.Attributes["src"];
            att.Value = RepairHyperlinkAddress(att.Value, web);
        }
相关问题