2012-12-05 38 views
2

我有一些使用HTML敏捷包的代码。我想要做的是,替换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; 
    } 

回答

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); 
     } 
+0

Actuallymy问题不是。我故意只做href。 – ozdogan

+0

然后,你应该发布的HTML,所以我们可以进一步检查的东西。 –