XML での埋め込み式 (Visual Basic)

埋め込み式を使用すると、実行時に評価される式を含む 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 が含まれていて、modifiedDate に日付 3/5/2006 が含まれている場合、このコードを実行すると、book の値は次のようになります。

<book category="fiction" isbn="12345">  
  <modifiedDate>3/5/2006</modifiedDate>  
</book>  

埋め込み式の場所と検証

埋め込み式は、XML リテラル式内の特定の場所でのみ使用できます。 このような式の場所により、式から返すことができる型と Nothing の処理方法が制御されます。 次の表では、埋め込み式の許可される場所と型について説明します。

リテラル内の場所 式の型 Nothing の処理
XML 要素名 XName Error
XML 要素のコンテンツ Object または Object の配列 無視
XML 要素の属性名 XName 属性値も 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 リテラルではそれを使用できません。

Note

xmlns 名前空間属性を使用して XML 名前空間プレフィックスを宣言する場合は、属性値を定数文字列とする必要があります。 この点で、xmlns 属性を使用することは、Imports ステートメントを使用して XML 名前空間を宣言することに似ています。 埋め込み式を使用して XML 名前空間の値を指定することはできません。

関連項目