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

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

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

Re[4]: XML子要素の更新


(過去ログ 106 を表示中)

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

■63216 / inTopicNo.1)  XML子要素の更新
  
□投稿者/ asuka (1回)-(2012/08/07(Tue) 11:40:45)

分類:[.NET 全般] 

お世話になっております。

下記のようなconfigファイルがある場合のvalue値の更新方法について質問させて下さい。
<?xml version="1.0" encoding="utf-8"?>
<root>
 <setting name="DbName" serializeAs="String">
 <value>Test1</value>
 </setting>


C#側更新コード
XmlDocument doc = new XmlDocument();
doc.Load(_xmlFilePath);
foreach (XmlNode n in doc["root"])
{
 if (n.Name == "setting")
 {
 switch (n.Attributes.GetNamedItem("name").Value)
{
    case "DbName":
     n.ChildNodes[0].InnerText = "Test2"; break;


あれやこれやデバッガで要素の値を見て上記のようにコーディングすれば更新出来ることは確認出来ました。

ただ、<setting>の中に今後他の要素が増える可能性があり、出来れば名前でアクセスして更新したいと考えております。
その場合の更新方法を教えて頂ければ幸いです。
m(__)m


※試して駄目だったコード
n.Attributes.GetNamedItem("value").Value = "Test2";
n.Attributes.GetNamedItem("name").ChildNodes[0].Value = "Test2";
n.Attributes.GetNamedItem("name").ChildNodes[0].Attributes.GetNamedItem("value").Value = "Test2";

※しばらく前までサイトダウンしていましたよね?
いつから復活されたのでしょうか、復活されたようで嬉しいです。
引用返信 編集キー/
■63228 / inTopicNo.2)  Re[1]: XML子要素の更新
□投稿者/ 渋木宏明 (3回)-(2012/08/07(Tue) 22:15:40)
渋木宏明 さんの Web サイト
> ただ、<setting>の中に今後他の要素が増える可能性があり、出来れば名前でアクセスして更新したいと考えております。
> その場合の更新方法を教えて頂ければ幸いです。

更新対象のノードを SelectNodes() や SelectSingleNode() を使って取得すればいいんじゃないでしょうか。

引用返信 編集キー/
■63334 / inTopicNo.3)  Re[2]: XML子要素の更新
□投稿者/ asuka (2回)-(2012/08/15(Wed) 10:13:29)
お返事ありがとうございます。

「取得」…ではなく、Key?を指定して値の「設定」がしたいのですが、未だに分からず終いです、、、

引用返信 編集キー/
■63335 / inTopicNo.4)  Re[3]: XML子要素の更新
□投稿者/ 魔界の仮面弁士 (24回)-(2012/08/15(Wed) 11:09:18)
No63334 (asuka さん) に返信
> 「取得」…ではなく、Key?を指定して値の「設定」がしたいのですが、未だに分からず終いです、、、

該当ノードを SelectSingleNode で取得した後、
その取得したノードの内容を書き換えるとか。

XmlDocument doc = new XmlDocument();
doc.Load(_xmlFilePath);
XmlNode nDbName = doc.SelectSingleNode("/root/setting[@name='DbName']/value/text()");
if(nDbName != null)
{
  nDbName.Value = "New Value!";
  doc.Save(_xmlFilePath);
}
else
{
  // ノード作成
}

# テキストノードまで辿って Value プロパティを書き換える方法の他、
# value要素ノードまで取得してから InnerText プロパティを書き換える方法もアリ。


あるいは、App.Config でユーザースコープの設定として用意しておき、
  Properties.Settings.Default.DbName = "User Setting Value!";
  Properties.Settings.Default.Save();
のようにしてみるとか。

引用返信 編集キー/
■63336 / inTopicNo.5)  Re[4]: XML子要素の更新
□投稿者/ asuka (3回)-(2012/08/15(Wed) 15:58:05)
> # テキストノードまで辿って Value プロパティを書き換える方法の他、
> # value要素ノードまで取得してから InnerText プロパティを書き換える方法もアリ。
>
>
> あるいは、App.Config でユーザースコープの設定として用意しておき、
> Properties.Settings.Default.DbName = "User Setting Value!";
> Properties.Settings.Default.Save();
> のようにしてみるとか。

魔界の仮面弁士 さんお返事ありがとうございます。

色々な方法があるんですね、勉強になりました。

もちろんネットで調べては見たのですがどの方法にも出くわしませんでした。

一番上の方法で思い通りの実装が叶いました。

ありがとうございます。m(__)m
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -