C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: XMLテキストを読み込みたいです


(過去ログ 18 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■7089 / inTopicNo.1)  XMLテキストを読み込みたいです
  
□投稿者/ もねを (19回)-(2007/08/30(Thu) 10:33:08)

分類:[VB.NET/VB2005] 

こんにちは。久しぶりの書込みになります。
ご指導お願いいたします。

メモ帳を開いて拡張子を、xmlにしたテキストファイルを作成しました。

ファイル名:LOGIN.xml
<login>
<!--会社名-->
<value>
株式会社テスト
</value>

<!--会社名番号-->
<value>
1
</value>

<!--接続先のServer名\インスタンス or 接続先のIPアドレス\インスタンス-->
<value>
192.168.1.13\SQLEXPRESS
</value>

<!--接続先のデータベース名-->
<value>
test
</value>

<!--認証方式 TRUE:Windows認証 or FALSE:SQLServer認証-->
<value>
FALSE
</value>

<!--データベースログイン ユーザー名-->
<value>
sa
</value>

<!--データベースログイン パスワード-->
<value>
12345
</value>
</login>

上が作成したXMLファイルです。

VB2005のMyApplication_Startupイベントで、XMLファイルを読み込んで、各項目を変数にセットしたいのです。
下のようなコーディングをイメージしています。

Dim XMLPath As String = ""
Dim XMLDataSet As New DataSet
Dim XMLReader As IO.StreamReader
Dim str会社名 As String = ""
Dim str会社番号 As String = ""
Dim strServerName As String = ""

On Error GoTo MyApplicatio_Err

'パスの作成
XMLPath = System.IO.Directory.GetCurrentDirectory() & "\" & XMLFileName
'指定されたファイルは存在したのか?
If Not File.Exists(XMLPath) Then
MessageBox.Show("ログインに必要なXMLファイルが存在しません(重要)", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
End
End If

XMLReader = New IO.StreamReader(XMLPath)
XMLDataSet.ReadXml(XMLReader)

↓↓ここから下の書き方がわからない↓↓

str会社名 = XMLDataSet.Tables(0).Rows(0).Item(0) ← イメージです
str会社番号 = XMLDataSet.Tables(0).Rows(1).Item(0) ← イメージです
strServerName = XMLDataSet.Tables(0).Rows(2).Item(0) ← イメージです

参考書を片手にしているのですが見ている参考書は、DataGridViewに表示させる内容で、ドンと一発表示みたいな感じで書かれています。
XMLの各項目を1つづつ、変数にセットさせることは難しいのでしょうか?
かれこれ2日ほどオーバーヒート気味です。

よきアドバイスお願いします。

引用返信 編集キー/
■7097 / inTopicNo.2)  Re[1]: XMLテキストを読み込みたいです
□投稿者/ bee (2回)-(2007/08/30(Thu) 11:41:34)
>str会社名 = XMLDataSet.Tables(0).Rows(0).Item(0) ← イメージです
>str会社番号 = XMLDataSet.Tables(0).Rows(1).Item(0) ← イメージです
>strServerName = XMLDataSet.Tables(0).Rows(2).Item(0) ← イメージです

>参考書を片手にしているのですが見ている参考書は、DataGridViewに表示させる内容で、ドンと一発表示>みたいな感じで書かれています。
>XMLの各項目を1つづつ、変数にセットさせることは難しいのでしょうか?
>かれこれ2日ほどオーバーヒート気味です。

このコードを組んでみてうまくいかないのか
実行時エラーでうまくいかないのか
コンパイルエラーでうまくいかないのか
そもそも試してすらいないのか

いまいちよくわかりません…。

とりあえずイメージだけで考えていくより
検証用に小さなアプリか何かを作成して考えたほうがいいのでは?
1.自分のXmlをDataSetに読ませたらどんな形でDataSetに格納されるのか確認。
2.1を拡張してその各要素にアクセスして表示してみる。
みたいに。

#余談ですけどDBへの接続をXmlに記述するのってどうなんでしょう(セキュリティ的に)
#第三者でもそのXml見たら接続方法丸わかりになりそうな気が。
#暗号化等をするなら別でしょうけど
引用返信 編集キー/
■7100 / inTopicNo.3)  Re[1]: XMLテキストを読み込みたいです
□投稿者/ 渋木宏明(ひどり) (325回)-(2007/08/30(Thu) 11:52:01)
渋木宏明(ひどり) さんの Web サイト
> ファイル名:LOGIN.xml
(略)
> 上が作成したXMLファイルです。

XML 宣言が無いですね。

> 'パスの作成
> XMLPath = System.IO.Directory.GetCurrentDirectory() & "\" & XMLFileName

良くない手法です。
カレントディレクトリはアプリケーションの実行ファイルが配置されているディレクトリと等しいという保証はまったくありません。

「アプリケーションの実行ファイルが配置されているディレクトリ」を取得したいなら、言葉通り

Path.GetDirectoryName(Application.ExecutablePath)

とした方が良いと思います。

> '指定されたファイルは存在したのか?
> If Not File.Exists(XMLPath) Then
> MessageBox.Show("ログインに必要なXMLファイルが存在しません(重要)", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
> End
> End If

これもあまり良くないです。
存在チェックを通ったとして、次の瞬間には何らかの原因によってファイルは削除されてしまっているかもしれません。

「処理対象のファイルが存在しないこと」を検出するには、「実際に処理を始めて、そこで発生した例外を捕捉する」方が確実と思います。

> XMLReader = New IO.StreamReader(XMLPath)
> XMLDataSet.ReadXml(XMLReader)
>
> ↓↓ここから下の書き方がわからない↓↓

XML スキーマは用意してないんですよね?

個人的には、スキーマを用意してないんだったら DataSet なんか使わないほうがいいんじゃないかと思います。

XmlDocument.Load() して、XmlElement.SelectNodes(), XmlElement.SelectSingleNode() で目的の行を検索した方が早いように思います。

> 参考書を片手にしているのですが見ている参考書は、DataGridViewに表示させる内容で、ドンと一発表示みたいな感じで書かれています。
> XMLの各項目を1つづつ、変数にセットさせることは難しいのでしょうか?

その例で扱っている文書の構造は、↑の方で例示された XML 文書と同じ構造なんですか?

また、参考書では XML スキーマについて何か言及されていませんでしたか?

引用返信 編集キー/
■7108 / inTopicNo.4)  Re[2]: XMLテキストを読み込みたいです
□投稿者/ Hongliang (177回)-(2007/08/30(Thu) 12:32:38)
Hongliang さんの Web サイト
そもそもこんな XML、XML にする意味がなさそうですけど。
要素が全部 value て。

ただのテキストファイルで十分じゃないっすか?
StreamReader で一行ずつ読むだけですみますよ。
引用返信 編集キー/
■7119 / inTopicNo.5)  Re[3]: XMLテキストを読み込みたいです
□投稿者/ もねを (20回)-(2007/08/30(Thu) 13:33:19)
みなさまありがとうございました。
お恥ずかしいことに、すごく悩んでしまって時間ばかりとられてしまって。
以前であればiniファイルを使用して簡単に値を取得できていたのですが
参考書などを見ると iniファイル→XML と書かれていたので
XMLですれば簡単に取得できるものと思っていました。
しかし2日も悩んでしまい・・・とほほです。

beeさんのセキュリティー面ですが、私もどうしたらよいのか悩んでいます。
現在、SQLServer認証で試しているのですがユーザーとパスワードがどこかに必要です。
今は、テスト的に、デザインでSettingに書いています。
しかしsetup.exeを作成して違うPCにインストールしたら、xxx.exe.config ファイルがあり、メモ帳で開くと
settingの内容が書かれていました。
なので、設定にDB接続情報を書いてもだめですね・・・

Windows認証が一番理想なのですが、ワークグループだと繋がらないみたいで・・・
やはり暗号化するしかなさそうです。

ひどりさん
ご指摘助かります。新しい言語でよいのか悪いのかの区別もつかないで進めていますのでPG改善していきます。

結論ですが、テキストファイルで進めていくことにします。
XMLは今後の勉強のテーマとします。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -