次の方法で共有


方法: LINQ を使用して XML を変換する (Visual Basic)

XML リテラルを 使用すると、1 つのソースから XML を簡単に読み取り、新しい XML 形式に変換できます。 LINQ クエリを利用して変換するコンテンツを取得したり、既存のドキュメントのコンテンツを新しい XML 形式に変更したりできます。

このトピックの例では、コンテンツを XML ソース ドキュメントから HTML に変換してブラウザーで表示します。

次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。

XML ドキュメントを変換するには

  1. Visual Studio で、 コンソール アプリケーション プロジェクト テンプレートで新しい Visual Basic プロジェクトを作成します。

  2. プロジェクトで作成したModule1.vb ファイルをダブルクリックして、Visual Basic コードを変更します。 Module1 モジュールのSub Mainに次のコードを追加します。 このコードは、ソース XML ドキュメントを XDocument オブジェクトとして作成します。

    Dim catalog =
      <?xml version="1.0"?>
        <Catalog>
          <Book id="bk101">
            <Author>Garghentini, Davide</Author>
            <Title>XML Developer's Guide</Title>
            <Price>44.95</Price>
            <Description>
              An in-depth look at creating applications
              with <technology>XML</technology>. For
              <audience>beginners</audience> or
              <audience>advanced</audience> developers.
            </Description>
          </Book>
          <Book id="bk331">
            <Author>Spencer, Phil</Author>
            <Title>Developing Applications with Visual Basic .NET</Title>
            <Price>45.95</Price>
            <Description>
              Get the expert insights, practical code samples,
              and best practices you need
              to advance your expertise with <technology>Visual
              Basic .NET</technology>.
              Learn how to create faster, more reliable applications
              based on professional,
              pragmatic guidance by today's top <audience>developers</audience>.
            </Description>
          </Book>
        </Catalog>
    

    方法: ファイル、文字列、またはストリームから XML を読み込みます

  3. ソース XML ドキュメントを作成するコードの後に、次のコードを追加して、オブジェクトからすべての <Book> 要素を取得し、それらを HTML ドキュメントに変換します。 <Book>要素の一覧は、変換された HTML を含むXElement オブジェクトのコレクションを返す LINQ クエリを使用して作成されます。 埋め込み式を使用して、ソース ドキュメントの値を新しい XML 形式で配置できます。

    結果の HTML ドキュメントは、 Save メソッドを使用してファイルに書き込まれます。

    Dim htmlOutput =
      <html>
        <body>
          <%= From book In catalog.<Catalog>.<Book>
              Select <div>
                       <h1><%= book.<Title>.Value %></h1>
                       <h3><%= "By " & book.<Author>.Value %></h3>
                        <h3><%= "Price = " & book.<Price>.Value %></h3>
                        <h2>Description</h2>
                        <%= TransformDescription(book.<Description>(0)) %>
                        <hr/>
                      </div> %>
        </body>
      </html>
    
    htmlOutput.Save("BookDescription.html")
    
  4. Module1 Sub Mainしたら、新しいメソッド (Sub) を追加して、<Description> ノードを指定した HTML 形式に変換します。 このメソッドは、前の手順のコードによって呼び出され、 <Description> 要素の形式を保持するために使用されます。

    このメソッドは、 <Description> 要素のサブ要素を HTML に置き換えます。 ReplaceWith メソッドは、サブ要素の位置を保持するために使用されます。 <Description> 要素の変換されたコンテンツは、HTML 段落 (<p>) 要素に含まれます。 Nodes プロパティは、<Description> 要素の変換されたコンテンツを取得するために使用されます。 これにより、変換されたコンテンツにサブ要素が確実に含まれます。

    Module1Sub Main後に次のコードを追加します。

    Public Function TransformDescription(ByVal desc As XElement) As XElement
    
      ' Replace <technology> elements with <b>.
      Dim content = (From element In desc...<technology>).ToList()
    
      If content.Count > 0 Then
        For i = 0 To content.Count - 1
          content(i).ReplaceWith(<b><%= content(i).Value %></b>)
        Next
      End If
    
      ' Replace <audience> elements with <i>.
      content = (From element In desc...<audience>).ToList()
    
      If content.Count > 0 Then
        For i = 0 To content.Count - 1
          content(i).ReplaceWith(<i><%= content(i).Value %></i>)
        Next
      End If
    
      ' Return the updated contents of the <Description> element.
      Return <p><%= desc.Nodes %></p>
    End Function
    
  5. 変更を保存します。

  6. F5 キーを押してコードを実行します。 結果として保存されたドキュメントは次のようになります。

    <?xml version="1.0"?>
    <html>
      <body>
        <div>
          <h1>XML Developer's Guide</h1>
          <h3>By Garghentini, Davide</h3>
          <h3>Price = 44.95</h3>
          <h2>Description</h2>
          <p>
            An in-depth look at creating applications
            with <b>XML</b>. For
            <i>beginners</i> or
            <i>advanced</i> developers.
          </p>
          <hr />
        </div>
        <div>
          <h1>Developing Applications with Visual Basic .NET</h1>
          <h3>By Spencer, Phil</h3>
          <h3>Price = 45.95</h3>
          <h2>Description</h2>
          <p>
            Get the expert insights, practical code
            samples, and best practices you need
            to advance your expertise with <b>Visual
            Basic .NET</b>. Learn how to create faster,
            more reliable applications based on
            professional, pragmatic guidance by today's
            top <i>developers</i>.
          </p>
          <hr />
        </div>
      </body>
    </html>
    

こちらも参照ください