|
分類:[XML]
最近、VB.Net(2003)をはじめました。
INIファイルの代わりにXMLを使おうとして、ACCESSでテーブルを作ってRecordsetの永続化を使い、XMLファイルにしました。Datasetを使ってXMLを取り込みましたが、そこから必要な行を選択する方法がわかりません。
XMLは以下のようになっています。
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly'>
<s:AttributeType name='Environ' rs:number='1' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='255'/>
</s:AttributeType>
<s:AttributeType name='Machine' rs:number='2' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='255'/>
</s:AttributeType>
<s:AttributeType name='MyPath' rs:number='3' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='255'/>
</s:AttributeType>
<s:AttributeType name='DBServer' rs:number='4' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='255'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row Environ='Development' Machine='hogehage' MyPath='DEV' DBServer='hogehage'/>
<z:row Environ='Testing' Machine='hogehage' MyPath='TEST' DBServer='hogehage'/>
<z:row Environ='Production' Machine='hoge' MyPath='APPL' DBServer='hoge'/>
<z:row Environ='QA' Machine='hogehage' MyPath='APPL' DBServer='hogehage\QA'/>
</rs:data>
</xml>
プログラム自身のパスとPC名でDBServer(実際はインスタンス名)を取得して、SQLServer2000に接続しようとしています。このプログラムはサーバ上で動くものです。
本来なら サーバのPC名=インスタンス名 としてどのサーバ上にプログラムがあっても関係なく動くようにするものだと思いますが、諸般の事情(開発サーバが急遽テストサーバになってしまってインスタンス名を変えられない)でそうはなっていないので、外部ファイルで環境の違いを吸収しようとしています。
現在は以下のように1行ずつチェックしていますが本来の方法ではないと思います。
Dim rXML As New Data.DataSet
Dim sv As String
rXML.ReadXml(sPath & "\environ.xml") 'sPathは.exeのフルパス
Dim tbl As DataTable
tbl = rXML.Tables(1)
For Each wRow In tbl.Rows
If UCase(wRow.Item(1)) = UCase(sServer) Then
If InStr(UCase(sPath), UCase(wRow(2))) Then
sv = wRow.Item(3)
End If
End If
Console.WriteLine(wRow.Item(0) & "," & wRow.Item(1) & "," & wRow.Item(2) & "," & wRow.Item(3))
Next
ご教示いただければ幸いです。
|