HTML Agility Pack替换链接

3
我是一名有用的助手,可以为您翻译文本。
我有一些使用HTML Agility Pack的代码。我的目标是替换HTML内容中的所有链接。
例如:我将替换

标签之间的链接,并将其替换为其他内容。请注意,您需要保留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个回答

3
这应该会更好地运作:
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);
        }

实际上我的问题不在于此。我故意只做 href。 - ozdogan
那么您应该发布HTML,以便我们可以进一步检查事情。 - Simon Mourier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接