2014-11-03 97 views
0

我通過WebClient()將Web站點中的大量文件從WebClient()下載到本地目錄中。如何從鏡像網站替換本地文件中的所有鏈接

現在我想要創建一個控制檯應用程序(無Web應用程序)來替換所有html頁面中的所有鏈接,以獲得任何人在任何平臺上可讀的便攜式網站(usb key,mobile等),頁面必須被任何瀏覽器打開並且所有鏈接必須有效。

鏈接鍵入如下:

網站:http://www.domain.com

<a href="/fr/wol/b/r30/lp-f/Rbi8/F/1995/31/">xxx</a> 
<a href="/fr/wol/b/r30/lp-f/Rbi8/F/1995/66/21#h=134:288-135:0">zzz</a> 
<a href="/fr/wol/b/bc/r30/lp-f/1001060069/1026">yyy</a> 
<a href="/fr/wol/b/r30/lp-f/Rbi8/F/1995/61/3#h=16:360-17:0">xxx1</a> 
<a href="/fr/wol/dx/r30/lp-f/1001060064/30652">xxx1</a> 
<a href="http://www.domain.com/fr/1001060064/30652">xxx1</a> 

我不希望有這樣的鏈接:

<a href="file://C:/Users/Documents/Site/fr/wol/b/r30/lp-f/Rbi8/F/1995/31/">xxx</a> 

因爲整個網站必須是在任何地方。

的目標是有這樣的相關鏈接:(這只是一個例子,它不是精確的)

<a href="../../b/r30/lp-f/Rbi8/F/1995/31/">xxx</a> 
<a href="../../b/r30/lp-f/Rbi8/F/1995/66/21#h=134:288-135:0">zzz</a> 
<a href="../../../bc/r30/lp-f/1001060069/1026">yyy</a> 
<a href="../../b/r30/lp-f/Rbi8/F/1995/61/3#h=16:360-17:0">xxx1</a> 
<a href="../wol/1001060064/30652">xxx1</a> 

是什麼存在於語言的.Net Windows窗體或控制檯應用程序(非網絡)C#來快速建立這些相關鏈接?

+0

搜索HtmlAgilityPack教程 - 應該給你很好的起始點更新後更具體的 - 太寬泛了。 – 2014-11-03 22:29:08

回答

0

馬虎,沒有錯誤檢查,但它應該讓你開始。

public void EditWebPages() 
{ 
    foreach(String file in Directory.GetFiles("INSERT_FILES_DIR")) 
    { 
     String[] lines = File.ReadAllLines(file); 
     for(int i=0; i<lines.Length; i++) 
      lines[i] = lines[i].Replace(RegexGrab("href=\"(.*?)\"", lines[i]), "../../YOUR/RELATIVE/LINK/"); 
     File.WriteAllLines(file, lines); 
    } 
} 

public static String RegexGrab(String reg, String txt) 
{ 
    Regex regex = new Regex(reg, RegexOptions.Singleline); 
    Match match = regex.Match(txt); 
    String str = match.Groups[1].ToString(); 
    return str; 
} 
0

看來這就是答案:

Uri uri1 = new Uri(linkPage); 
Uri uri2 = new Uri(linkParentPage); 
Uri relativeUri = uri2.MakeRelativeUri(uri1); 
string result = Uri.UnescapeDataString(relativeUri.ToString()); 
相關問題