.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]Webページに含まれるリンクを動的に変更するには?
WebBrowserコントロールのコンテンツを文字列により設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

- PR -

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH