###前提・実現したいこと
<?xml version="1.0" encoding="utf-8" ?> <Extension xmlns=""> <Data Id="1A" Class=""/> <Group Id="BGroup"> <Data Id="1B" Class=""/> <Data Id="2B" Class=""/> <Data Id="3B" Class=""/> <Data Id="4B" Class=""/> </Group> <Group Id="CGroup"> <Data Id="1C" Class=""/> <Data Id="2C" Class=""/> <Data Id="3C" Class=""/> <Data Id="4C" Class=""/> </Group> </Extension>
上記のようなxmlを読込後
Group Id="CGroup"
のData Id="3C"のClassの値を書き換えて保存したいです。
Classだけでなく他の項目がありますが長くなってしまうので省力させてください。
※xmlns=""とか""となっていますがここに書くと長くなったりしていますので省きます。
XmlDocument document = new XmlDocument(); document.Load(FileName); document.SelectSingleNode(@"/Extension/Group[@Id='CGroup']/Data[@Id='3C']")
とやるとNullがかえってきてしまいます。
どこのPathの書き方が間違っているのでしょうか?
正しく取得できる方法と取得後
Classや他の項目の値を変更して保存する方法を教えていただきたいです。
document.GetElementsByTagName("Group")
とやるとグループは取得できたりするのですがそこから3Cを抜き出す方法が不明です。
List内のInnerxmlを見ると
<Data Id=\"3C\"...>
とはなっていますが・・・
///////
追記
var nodeList = document.GetElementsByTagName("Group"); foreach (XmlElement list in nodeList) { string id = list.Attributes.GetNamedItem("Id").Value.ToString(); if (id == "CGroup") { foreach (XmlElement child in list.ChildNodes) { string childId = child.Attributes.GetNamedItem("Id").Value.ToString(); if (childId == "3C") { child.SetAttribute("Class", ""); } } } } document.Save(FileName); コード雑ですみません。
一応こんな感じで書き換えができるようにはなりました。
遠まわしな書き方だと思っているのですが省略できそうなとこなどありますか?
////////////////////////////////////////////////////////////////////////////////////////////////////////
<?xml version="1.0" encoding="utf-8" ?> <Extension xmlns="http://会社のURL/Class.xsd"> <Data Id="1A" Class=""/> <Group Id="CGroup"> <Data Id="1C" Class="1CClass"/> <Data Id="2C" Class="2CClass"/> <Data Id="3C" Class="3CClass"/> <Data Id="4C" Class="4CClass"/> </Group> </Extension>回答1件
あなたの回答
tips
プレビュー