こんばんは。いつもお世話になっております。
前提・実現したいこと
Visual Studio 2017 Communityを使って開発をしています。
XMLファイルを読み、置換して保存したいです。
発生している問題・エラーメッセージ
XMLファイルは、構造的だと思うのですが、うまく該当のNodeとattributeをとりだせずにいます。
取り出す方法と置換方法を教えてください。
試行錯誤のどこが違うのか、添削していただけるとなお助かります。
該当のソースコード
xml
1<?xml version="1.0" encoding="utf-8"?> 2<Users> 3 <PropertyGroup> 4 <UserTarget>Person</UserTarget> 5 </PropertyGroup> 6 <UserGroup> 7 <FamilyName NameString="大山" /> 8 <User Name="ひより" /> 9 <User Name="総司" /> 10 </UserGroup> 11 <UserGroup> 12 <UserItem Name="ベルト" /> 13 </UserGroup> 14</Users>
試したこと
C#
1//現在のxmlを読み込む 2var contents = XElement.Load(xmlpath); 3 4XNamespace nspace = contents.Name.Namespace; 5// ここから試行錯誤。xml-Users-UserGroup-Userを取得したい。 6// 取得してそのattrubuteのNameの値を置換したい。 7var 子孫s = projects.Element(nspace + "ItemGroup").DescendantNodesAndSelf(); 8var Usergroup = projects.Element(nspace + "UserGroup"); 9var UserGroups = projects.Elements(nspace + UserGroup"); 10foreach(var item in UserGroups) { 11 var itemuser = item.Name = "User"; 12 Console.Write(itemuser); 13} 14 15var ItemGroupNones = projects.Elements(nspace + "UserGroup").Elements("User"); 16 17//置換先 18var replaceto = projects.Elements(nspace + "UserGroup") 19 .Where(element => element.ToString().Contains("総司")) 20 .FirstOrDefault(); 21 22replaceto.ReplaceAttributes( 23 new XElement(nspace + "User", 24 new XAttribute("Name", "加賀美") 25 ) 26 ); 27} 28//xmlを保存 29contents.Save(xmlpath);
期待する値
var replaceto = projects.Elements(nspace + "UserGroup") .Where(element => element.ToString().Contains("総司")) .FirstOrDefault();
ここでreplacetoに<User Name="総司" />
### 実際の値
xmlの全文。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2017 community
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/25 09:11
2018/08/26 17:00