XML での埋め込み式
更新 : 2007 年 11 月
埋め込み式を使用すると、実行時に評価される式を含む XML リテラルを作成できます。埋め込み式の構文は <%= expression %> であり、これは ASP.NET で使用される構文と同じです。
たとえば、XML 要素リテラルを作成し、埋め込み式とリテラル テキストの内容を結合できます。
Dim isbnNumber As String = "12345"
Dim modifiedDate As String = "3/5/2006"
Dim book As XElement = _
<book category="fiction" isbn=<%= isbnNumber %>>
<modifiedDate><%= modifiedDate %></modifiedDate>
</book>
isbnNumber に整数 12345 が含まれ、content に文字列 "Book of the week" が含まれる場合、このコードを実行すると、book の値は次のようになります。
<book category="fiction" isbn="12345">Book of the week</book>
埋め込み式の位置と検証
XML リテラル式の中で埋め込み式を使用できる位置は決まっています。式の位置により、式が返すことのできる型と、Nothing の処理方法が決まります。埋め込み式を使用できる位置と式の型を次の表に示します。
リテラルでの位置 |
式の型 |
Nothing の処理 |
---|---|---|
XML 要素名 |
エラー |
|
XML 要素の内容 |
Object または Object の配列 |
無視 |
XML 要素の属性名 |
属性値も Nothing である場合以外はエラー |
|
XML 要素の属性値 |
Object |
属性宣言は無視されます |
XML 要素の属性 |
XAttribute または XAttribute のコレクション |
無視 |
XML ドキュメントのルート要素 |
XElement または 1 つの XElement オブジェクトのコレクションと、任意の数の XProcessingInstruction オブジェクトおよび XComment オブジェクト |
無視 |
XML 要素名での埋め込み式の例 :
Dim elementName As String = "contact" Dim contact1 As XElement = <<%= elementName %>/>
XML 要素の内容での埋め込み式の例 :
Dim contactName As String = "Patrick Hines" Dim contact2 As XElement = _ <contact><%= contactName %></contact>
XML 要素の属性名での埋め込み式の例 :
Dim phoneType As String = "home" Dim contact3 As XElement = _ <contact <%= phoneType %>="206-555-0144"/>
XML 要素の属性値での埋め込み式の例 :
Dim phoneNumber As String = "206-555-0144" Dim contact4 As XElement = _ <contact home=<%= phoneNumber %>/>
XML 要素の属性での埋め込み式の例 :
Dim phoneAttribute As XAttribute = _ New XAttribute(XName.Get(phoneType), phoneNumber) Dim contact5 As XElement = _ <contact <%= phoneAttribute %>/>
XML のドキュメント ルート要素での埋め込み式の例 :
Dim document As XDocument = _ <?xml version="1.0"?><%= contact1 %>
Option Strict を有効にすると、コンパイラは、必要な型に拡大された各埋め込み式の型をチェックします。唯一の例外は XML ドキュメントのルート要素の場合で、コードの実行時に検証されます。Option Strict を指定しないでコンパイルする場合は、Object 型の式を埋め込むことができ、型は実行時に検証されます。
内容が省略可能な位置では、Nothing を含む埋め込み式は無視されます。つまり、XML リテラルを使用する前に、要素の内容、属性値、および配列要素が Nothing でないことをチェックする必要はありません。要素名や属性名などの必須の値には、Nothing を指定できません。
特定の型のリテラルにおける埋め込み式の使用の詳細については、「XML ドキュメント リテラル」および「XML 要素リテラル」を参照してください。
スコープ規則
コンパイラは、各 XML リテラルを、適切なリテラル型に対するコンストラクタ呼び出しに変換します。XML リテラルのリテラル内容と埋め込み式が、引数としてコンストラクタに渡されます。つまり、XML リテラルに使用できるすべての Visual Basic プログラミング要素を、埋め込み式にも使用できます。
XML リテラル内では、Imports ステートメントで宣言されている XML 名前空間プレフィックスにアクセスできます。xmlns 属性を使用して、要素内で、新しい XML 名前空間プレフィックスを宣言したり、既存の XML 名前空間プレフィックスをシャドウしたりできます。新しい名前空間は、その要素の子ノードには使用できますが、埋め込み式内の XML リテラルには使用できません。
メモ : |
---|
xmlns 名前空間属性を使用して XML 名前空間プレフィックスを宣言する場合、属性値を文字列定数にする必要があります。この点について、xmlns 属性を使用することは、Imports ステートメントを使用して XML 名前空間を宣言することと似ています。埋め込み式を使用して、XML 名前空間の値を指定することはできません。 |
参照
概念
参照
Imports ステートメント (.NET 名前空間および型)