こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

中身が一部しかわかっていないXMLの読み方

XML例
<A>
<B>
bbb
</B>
<C>
<D>
ddd
</D>
</C>
</A>

C#でXMLを読み、特定のタグの中身を書き換える処理を実装しようしています。
ただしXMLファイルの中に書き換えたいタグ以外にどんなタグがあるかがわかっていません。
上記の例の場合、
「<A> - <C> - <D>のdddを書き換えたい」ということはわかっています。
この場合どのように行うのがよいでしょうか?

ネットでのソースを参考に書き換えたい値のタグが見つかるまで再帰処理を行い
タグが見つかった場合値を書き換えるような処理を書いてみました。
よくあるやり方や、もっとスマートな方法が有りましたらご教授お願いします。
また直接関係なくともヒントとなるようなものでも結構です。

よろしくお願いします。

void test()
{
XmlDocument document = new XmlDocument();

// ファイルから読み込む
document.Load(filePath);

readXML(document.DocumentElement);
}

void readXML(XmlNode node)
{
// if(node.Name == "D") // 書き換えたい値のタグか判定する
//{
// 値を書き換える処理
//}

if (node.HasChildNodes)
{
node = node.FirstChild;
while (node != null)
{
readXML(node);
node = node.NextSibling;
}
}
}

投稿日時 - 2014-04-23 18:08:27

QNo.8566036

困ってます

質問者が選んだベストアンサー

System.Xml.XmlNode.SelectNodesで要素をXPathで指定できますから,これを使います。
ref) http://msdn.microsoft.com/ja-jp/library/hcebdtae(v=vs.110).aspx

foreach (var element in document.SelectNodes("/A/C/D").OfType<XmlElement>())
{
// element.InnerTextを書き換える
}
とか,
foreach (var textNode in document.SelectNodes("/A/C/D/text()").OfType<XmlText>())
{
// textNode.Valueを書き換える
}
とか。

投稿日時 - 2014-04-23 22:08:58

お礼

こうゆうものがあるのですね。
非常に助かりました。
ありがとうございます。

投稿日時 - 2014-05-13 09:39:47

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問