如何从镜像网站替换本地文件中的所有链接

时间:2014-11-03 22:12:52

标签: c# html .net hyperlink

我使用WebClient()从C#网站下载了很多文件到我的本地目录。

现在我想创建一个控制台应用程序(没有Web应用程序)来替换所有html页面中的所有链接,以便任何平台上任何人都可读取可移植的网站(usb密钥,移动设备等),页面必须是由任何浏览器打开,所有链接必须有效。

链接的输入方式如下:

网站: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窗体或控制台应用程序(非Web)C#以快速生成这些相关链接?

2 个答案:

答案 0 :(得分:0)

邋and且没有错误检查,但它应该让你开始。

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;
}

答案 1 :(得分:0)

似乎就是答案:

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