2014-11-03 85 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());