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

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

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

xml要素の追加について

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

■92545 / inTopicNo.1)  xml要素の追加について
  
□投稿者/ アン (1回)-(2019/10/04(Fri) 10:12:07)

分類:[.NET 全般] 

2019/10/04(Fri) 11:12:28 編集(投稿者)

.net4.5 C# Windows7〜 32/64bit
お世話になります。
XMLの要素追加についてヒントをいただきたくお願いします。

@ベースとなるXMLとして
<config>
<masters>
<master name="a1" type="1">mst1</master>
<master name="a2" type="2">mst2</master>
</masters>
</config>

があったとします。


Aこれに、以下の更新情報(mst3の要素追加)を反映したい場合ですが。
<config>
<masters>
<master name="a3" type="3">mst3</master>
</masters>
</config>

同じ階層構造で@にAを簡単に追加反映するような手段(クラスやメソッド)は有りますでしょうか。
もしくは、コードでxmlの各階層をたどって、追加編集するしかないでしょうか。

よろしくお願いします。





引用返信 編集キー/
■92546 / inTopicNo.2)  Re[1]: xml要素の追加について
□投稿者/ 魔界の仮面弁士 (2410回)-(2019/10/04(Fri) 12:08:28)
2019/10/04(Fri) 12:10:46 編集(投稿者)

No92545 (アン さん) に返信
> 同じ階層構造で@にAを簡単に追加反映するような手段(クラスやメソッド)は有りますでしょうか。

このような場合、「置換」なのか「追加」なのかといった情報が必要となりそうです。

たとえば、アプリケーション設定ファイルの出力ため、
基準となる app.config に対して、ビルド設定に応じて
app.debug.config と app.release.config のいずれかを
切り替えてマージすることで、最終出力とするケースがあります。

https://qiita.com/m2tmk/items/c24e4d0eb30d820dd7b5
https://marketplace.visualstudio.com/items?itemName=GolanAvraham.ConfigurationTransform
https://docs.microsoft.com/ja-jp/aspnet/core/host-and-deploy/iis/transform-webconfig?view=aspnetcore-3.0

上記の場合には、
 xdt:Transform="Replace"
 xdt:Transform="InsertIfMissing"
 xdt:Transform="SetAttributes"
とか
 xdt:Locator="Match(name)"
 xdt:Locator="Match(key)"
といった属性情報を使って、マージの仕方を制御しています。


そうした何らかの判断情報が無いと、マージするにしても、
最終結果をどうすべきかが曖昧になってしまいそうです。

《子要素の単純追加》
<config>
 <masters>
  <master name="a1" type="1">mst1</master>
  <master name="a2" type="2">mst2</master>
 </masters>
 <masters>
  <master name="a3" type="3">mst3</master>
 </masters>
</config>


《最初の同名要素の置換》
<config>
 <masters>
  <master name="a3" type="3">mst3</master>
  <master name="a2" type="2">mst2</master>
 </masters>
</config>


《属性なしの階層は統合するが、属性付きの要素はたとえ重複エントリであっても単純追加》
<config>
 <masters>
  <master name="a1" type="1">mst1</master>
  <master name="a2" type="2">mst2</master>
  <master name="a3" type="3">mst3</master>
 </masters>
</config>
引用返信 編集キー/
■92547 / inTopicNo.3)  Re[1]: xml要素の追加について
□投稿者/ WebSurfer (1943回)-(2019/10/04(Fri) 12:34:24)
No92545 (アン さん) に返信

単純に、

<config>
  <masters>
    <master name="a1" type="1">mst1</master>
    <master name="a2" type="2">mst2</master>
  </masters>
</config>

を Xdocument / XElement などの .NET ライブラリを使って、

<config>
  <masters>
    <master name="a1" type="1">mst1</master>
    <master name="a2" type="2">mst2</master>
    <master name="a3" type="3">mst3</master>
  </masters>
</config>

のようにしたいということですか?

であれば、一番上の xml から XDocument.Load メソッドで XDocument オブジェクトを生成して、
それへの参照が例えば xdocument とすると、以下のようにすれば良いはずです。

xdocument.Element("config").Element("masters").
    Add(new XElement("master", "mst3", new XAttribute("name", "a3"), new XAttribute("type", "3")));

引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ