.NET TIPS

相対URLを絶対URLに変換するには?

デジタルアドバンテージ
2003/08/02

 HTMLを解析して、それに含まれるリンクを抽出するような場合、相対URLを絶対URLに変換する処理が必要となることがある。

 例えば、@ITのサイトのトップページ(http://www.atmarkit.co.jp/index.html)に次のようなリンクが含まれているとしよう。

<a href="/fdotnet/index.html">Insider.NETへ</a>

 ここでリンク先のURLである「/fdotnet/index.html」はトップページからの相対URLであり、その絶対URLは「http://www.atmarkit.co.jp/fdotnet/index.html」となる。

 相対URLがスラッシュから始まっている場合には、文字列の操作により絶対URLを作成するのは容易だが、相対URLは「fdotnet/index.html」や「../index.html」といった記述も可能だ。このような場合には絶対URLを作成するのは少々めんどうな作業となる。

 Uriクラス(System名前空間)を使用すれば、こういった相対URLを絶対URLに簡単に変換することができる。UriクラスはURI(Uniform Resource Identifier)を表現するためのものだ(リソースの位置を示すURLはURIの1つの形式である)。

 変換にはまず、ベースとなる絶対URLに対するUriクラスを作成する。

Uri baseURL = new Uri("http://www.atmarkit.co.jp/index.html");

 次に2つのパラメータをとるバージョンのコンストラクタを使用して、別のUriオブジェクトを作成する。パラメータには、今作成したベースURLを示すUriオブジェクトと、相対URLとなる文字列を指定する。

URi destURL = new Uri(baseURL, "/fdotnet/index.html");

 このコンストラクタでは、ベースURLと相対URLが組み合わされたURLを基にしてUriオブジェクトが作成される。Uriオブジェクトからは、AbsoluteUriプロパティにより、その絶対URLを得ることができる。

 次のサンプル・プログラムはいくつかの書式の相対URLを絶対URLに変換している例を示すものだ。

// uri.cs

using System;

public class GetAbsoluteURL {
  static void Main() {

    Uri baseURL, destURL;

    baseURL = new Uri("http://www.atmarkit.co.jp/fdotnet/");

    destURL = new Uri(baseURL, "index.html");
    Console.WriteLine(destURL.AbsoluteUri);
    // 出力: http://www.atmarkit.co.jp/fdotnet/index.html

    destURL = new Uri(baseURL, "/fdotnet/index.html");
    Console.WriteLine(destURL.AbsoluteUri);
    // 出力: http://www.atmarkit.co.jp/fdotnet/index.html

    destURL = new Uri(baseURL, "../index.html");
    Console.WriteLine(destURL.AbsoluteUri);
    // 出力: http://www.atmarkit.co.jp/index.html

    destURL = new Uri(baseURL, "../fwin2k/");
    Console.WriteLine(destURL.AbsoluteUri);
    // 出力: http://www.atmarkit.co.jp/fwin2k/

    destURL = new Uri(baseURL, "http://www.google.com/");
    Console.WriteLine(destURL.AbsoluteUri);
    // 出力: http://www.google.com/
  }
}

// コンパイル方法: csc uri.cs
いくつかの書式の相対URLを絶対URLに変換するC#のサンプル・プログラム(uri.cs)

 サンプル・プログラム中の最後の例からも分かるように、コンストラクタの第2パラメータに絶対URLを指定した場合には、そのURLがAbsoluteUriプロパティに設定される。このためHTMLに含まれるリンク(URL)をすべて絶対URLに変換するような場合には、そのリンクが相対か絶対かを区別せずに処理することができる。End of Article

カテゴリ:クラス・ライブラリ 処理対象:URL
使用ライブラリ:Uriクラス(System名前空間)
 
この記事と関連性の高い別の.NET TIPS
ClickOnceアプリの起動時にパラメータを渡すには?
[Silverlight 2]アプリケーションが配置されているURLを取得するには?
WebClientクラスでGETメソッドによりクエリ文字列を送信するには?
[ASP.NET]クライアントからリクエストされたURLを取得するには?
WebBrowserコントロールのコンテンツを文字列により設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間