私は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;
}
これはうまくいくはずです:
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);
}