- - PR -
web.configのxmlをパースしたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-01-29 13:14
halと申します。いつもお世話になっています。
当方、vs.net2003(c#)にてwebアプリケーションの開発を行っています。 webアプリケーションにて使用するdbへのアクセス情報をweb.configに格納して使っているのですが、今回他のバッチ処理からもそのweb.configの情報を参照したいと思っています。 web.config自体はxmlで記述されているのでパースすればバッチプログラムの方で受け取れるのではないかと想像しているのですが、やり方がまったく分かりません(汗)。 ここでxmlのパース方法を1からお聞きするのはさすがに心苦しいので、説明しきれないという事でしたら「ここに説明が載っているよ」という情報でもかまいません。 よろしくお願いします。 | ||||
|
投稿日時: 2004-01-29 14:07
こんにちは。
VB.NETですが。。 Private doc As System.Xml.XmlDocument Private node As System.Xml.XmlNode '構成ファイルをXML DOMに読み込む doc = New System.Xml.XmlDocument doc.Load(appConfigPath) '←web.configのパス node = doc("configuration")("appSettings") 'ノードを探す Dim n As System.Xml.XmlNode For Each n In doc("configuration")("appSettings") If n.Name = "add" Then If n.Attributes.GetNamedItem("key").Value = strKey Then mKey = n.Attributes.GetNamedItem("key").Value mValue = n.Attributes.GetNamedItem("value").Value End If End If Next こんな感じで大丈夫だと思います。 実際web.configでは使ったことないので; [ メッセージ編集済み 編集者: ネームスペース 編集日時 2004-01-29 14:09 ] | ||||
|
投稿日時: 2004-01-29 14:53
簡単にXmlDocumentクラスを使った場合、
XmlDocument doc = new XmlDocument(); doc.Load("設定ファイル名パス"); //接続文字列のkeyをキーにしてノードを取得 XmlNode targetNode = doc.SelectSingleNode(String.Format( "//appSettings/add[@key = '{0}']", "DB接続文字列Key"); //接続文字列をセット string dbConnectionString = targetNode["value"].Value; 実際にはNull検証とかが必要になると思いますが、こんな感じでXPathを使ったほうが簡単だと思います。 XmlDocumentじゃなくてもXmlTextReaderやXPathDocumentも使えます。 むしろ読み取り専用ならそっちのほうがいいかもしれません。 | ||||
|
投稿日時: 2004-01-29 20:54
ネームスペースさん、karajanさん、丁寧なレスありがとうございます。
色々試行錯誤してみて一応XPathを使った方法でやってみようと思いました。 (ループでノードを探す方法はVB.NETで苦戦してしまったので…、ネームスペースさんすみません) なのですが、 string dbConnectionString = targetNode["value"].Value; の部分で「オブジェクトがインスタンスに設定されていない」エラーになってしまいます。 tagetNode.OuterXml; としたところ、DB接続定義の行(ノード?)が表示されたのでノードの取得はうまくいっているようなのですが、value値が取得出来ませんでした。 また、XmlTextReaderでの取得も試みてみたのですが、やはりtypeなどの属性は取得できるのにvalue値が取得出来ませんでした。 もうあと一歩だと思うのですが手詰まりです。 (tagetNode.OuterXmlから文字列操作で抜き出すのはさすがに…) 何度も申し訳ありませんが、ご教授よろしくお願いします。 | ||||
|
投稿日時: 2004-01-29 21:32
valueって属性なんですよね?属性を取らないと駄目なんでは? | ||||
|
投稿日時: 2004-01-29 21:37
失礼しました。
targetNode.Attributes["value"].Value; ですね。 すみませんでした。 | ||||
|
投稿日時: 2004-01-29 21:44
ちなみに、NameValueSectionHandlerなどのクラスをインスタンス化して、無理やり読み込むという荒業も出来るかも。
# 対象の XmlNode を取得するところまでは一緒ですが。 これをやると、remove や clear などのタグにも、対応できるかもしれません(もちろん厳密を期すればいろいろと問題はあるでしょうけど)。 | ||||
|
投稿日時: 2004-01-30 11:15
お世話になっています。
無事web.config内の情報をバッチ処理から参照出来ました。 ノード内の属性は「Attributes」で参照するんですね。 xmlの基礎が全く解ってないので少しの事で苦労しました(汗)。 一から勉強しなおします。 ネームスペースさん、karajanさん、なちゃさん、丁寧なレスありがとうございました。 |
1