将相对URL替换为绝对URL

Roc*_*ngh 1 c# regex asp.net .net-4.0

我有一个字符串形式的页面的html源代码:

<html>
    <head>
          <link rel="stylesheet" type="text/css" href="/css/all.css" /> 
    </head>
    <body>
        <a href="/test.aspx">Test</a>
        <a href="http://mysite.com">Test</a>
        <img src="/images/test.jpg"/>
        <img src="http://mysite.com/images/test.jpg"/>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想将所有相对路径转换为绝对路径.我希望输出为:

<html>
    <head>
          <link rel="stylesheet" type="text/css" href="http://mysite.com/css/all.css" /> 
    </head>
    <body>
        <a href="http://mysite.com/test.aspx">Test</a>
        <a href="http://mysite.com">Test</a>
        <img src="http://mysite.com/images/test.jpg"/>
        <img src="http://mysite.com/images/test.jpg"/>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

注意:我只希望在该字符串中将相对路径转换为绝对路径.不应该触及已经存在于该字符串中的绝对值,它们对我来说很好,因为它们已经是绝对的.这可以通过正则表达式或其他方式完成吗?

L.B*_*L.B 18

不要尝试解析html与正则表达式在这里expained /sf/answers/121271811//sf/answers/123071371/

使用HTML解析器像HtmlAgilityPack代替

string html = 
@"<html>
    <head>
            <link rel=""stylesheet"" type=""text/css"" href=""/css/all.css"" /> 
    </head>
    <body>
        <a href=""/test.aspx"">Test</a>
        <a href=""http://example.com"">Test</a>
        <img src=""/images/test.jpg""/>
        <img src=""http://example.com/images/test.jpg""/>
    </body>
</html>";

StringWriter writer = new StringWriter();
string baseUrl= "http://example.com";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

foreach(var img in doc.DocumentNode.Descendants("img"))
{
    img.Attributes["src"].Value = new Uri(new Uri(baseUrl), img.Attributes["src"].Value).AbsoluteUri;
}

foreach (var a in doc.DocumentNode.Descendants("a"))
{
    a.Attributes["href"].Value = new Uri(new Uri(baseUrl), a.Attributes["href"].Value).AbsoluteUri;
}

doc.Save(writer);

string newHtml = writer.ToString();
Run Code Online (Sandbox Code Playgroud)


mpl*_*jan 5

添加

<base href="http://mysite.com/images/" />
Run Code Online (Sandbox Code Playgroud)

到页面头部