ADO.NET DataSetのホームへ戻る

  DataSetWriteXml()メソッドで作成したファイルをXMLコントロールに表示するサンプル

DataSetWriteXml()メソッドで作成したファイルをXMLコントロールに表示するサンプル

 

このサンプルは、DataSetに格納されている得意先テーブルのデータをWriteXml()メソッドでXMLファイルに出力します。さらに、XMLファイルをXmlDocumentにロードしてASP.NETXMLコントロールに表示します。XmlDocumentにロードされたXMLデータは、XSLスタイルシートでHTMLタグを埋め込んでからXMLコントロールに表示します。

 

このサンプルでは、以下のノウハウを習得することができます。

 

   DataSetWriteXml()メソッドの使い方

   DataSetDataSetNameプロパティの使い方

   XMLファイルが存在するか調べる方法

   XmlDocumentXMLファイルをロードする方法

   XslTransformXSLスタイルシートをロードする方法

   XML/XSLをトランスフォームする方法

   XMLデータをASP.NETXMLコントロールに表示する方法

 

サンプルの行38では、ASP.NETXMLコントロールを定義しています。このコントロールには、Page_Load()イベントでXMLデータを表示します。

 

38: <asp:XML id="xmlCustomers" runat="server" />

 

Page_Load()イベントの行11-13では、得意先テーブルから3件のレコードを抽出するSQLを生成しています。行14-17では、OleDbConnectionOleDbDataAdapterDataSetのインスタンスを生成しています。行18-19では、XMLファイルとXSLスタイルシートのフルパスを保存しています。XMLファイルは、DataSetWriteXml()メソッドで作成します。XSLスタイルシートは、ASPXファイルが格納されているフォルダに用意されています。

 

Customers.xslスタイルシートの内容:

<?xml version="1.0" encoding="shift_jis" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<table border="1">

<tr style="font-size:10pt; color:blue; font-weight:bold;" align="center">

 <td>ID</td>

 <td>得意先名</td>

 <td>担当者名</td>

</tr>

<xsl:for-each select="Customers/Customer">

<tr style="font-size:10pt; color:black;" align="left">

 <td><xsl:value-of select="CustomerID"/></td>

 <td><xsl:value-of select="CompanyName"/></td>

 <td><xsl:value-of select="ContactName"/></td>

</tr>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

 

Customers.xslには、得意先テーブルのXMLデータにHTMLタグを挿入するためのスタイルシートが記述されています。詳しい解説は省略しますが、以下のようなHTMLが挿入されます。@CustomerID@CompanyName@ContactNameには、XMLデータが代入されます。

 

<table border=”1”>

  <tr style=”font-size:10pt; color:blue; font-weight:bold;” align=”center”>

    <td>ID</td>

    <td>得意先名</td>

    <td>担当者名</td>

  </tr>

  <tr style=”font-size:10pt; color:black;” align=”left”>

    <td>@CustomerID</td>

    <td>@CompanyName</td>

    <td>@ContactName</td>

  </tr>

</table>

 

21では、DataSetDataSetNameプロパティにCustomersを設定しています。行22では、OleDbDataAdapterFill()メソッドで得意先テーブルからレコードを抽出してDataSetに格納します。行23-25If…End Ifでは、Customers.xmlファイルが存在しないときDataSetWriteXml()メソッドを実行してXMLファイルを作成します。

 

Customers.xmlファイルの内容:

<?xml version="1.0" ?>

<Customers>

  <Customer>

    <CustomerID>1</CustomerID>

    <CompanyName>喫茶たいむましん</CompanyName>

    <ContactName>林  千春</ContactName>

  </Customer>

  <Customer>

    <CustomerID>2</CustomerID>

    <CompanyName>小料理なんごく</CompanyName>

    <ContactName>河本 なみ</ContactName>

  </Customer>

  <Customer>

    <CustomerID>3</CustomerID>

    <CompanyName>割烹ふじい</CompanyName>

    <ContactName>山久 良美</ContactName>

  </Customer>

</Customers>

 

XMLファイルには、DataSetに格納されている得意先テーブルがXML形式で出力されます。

 

10: Sub Page_Load()
 11:   Dim strSQL As String = "Select top 3 CustomerID, " & _
 12:     "CompanyName, ContactName " & _
 13:     "From Customers"
 14:   Dim con As New OleDbConnection( _
 15:     ConfigurationSettings.AppSettings("conStringNw"))
 16:   Dim da As New OleDbDataAdapter(strSQL, con)
 17:   Dim ds As New DataSet()
 18:   Dim strXmlFile As String = MapPath("Customers.xml")
 19:   Dim strXslFile As String = MapPath("Customers.xsl")
 20:
 21:   ds.DataSetName = "Customers"
 22:   da.Fill(ds, "Customer")
 23:   If Not File.Exists(strXmlFile) Then
 24:     ds.WriteXml(strXmlFile)
 25:   End If
       :::
 33: End Sub

 

27-32では、ASP.NETXMLコントロールにXMLデータを表示しています。行27-28では、XmlDocumentXslTransformのインスタンスを生成しています。行29では、XmlDocumentLoad()メソッドでCustomers.xmlファイルをロードしています。行30では、XslTransformLoad()メソッドでCustomers.xslスタイルシートをロードしています。行31では、XMLコントロールのDocumentプロパティにXmlDocumentを設定しています。行32では、XMLコントロールのTransformプロパティにXslTransformを設定しています。これで、XMLデータがXSLスタイルシートでトランスフォームされて表示されます。

 

27:   Dim xmlDoc As XmlDocument = New XmlDocument()
 28:   Dim xslTrans As XslTransform = New XslTransform()
 29:   xmlDoc.Load(strXmlFile)
 30:   xslTrans.Load(strXslFile)
 31:   xmlCustomers.Document = xmlDoc
 32:   xmlCustomers.Transform = xslTrans

Tip

WriteXml()メソッドでブラウザに直接送信するには

 

DataSetWriteXml()メソッドでブラウザに直接XMLデータを送信するには、ResponseOutputStreamプロパティを使用します。

 

ds.DataSetName = "Customers"
da.Fill(ds, "Customer")
Response.ContentType = "text/xml"
ds.WriteXml(Response.OutputStream)
Response.End

 

ADO.NET DataSetのホームへ戻る