ショボ短歌会

C#初心者で勉強をしております。
XPathを使用してのノードの指定方法について教えてください。

・WPF(C#)を使用してプログラムを組んでおります。
・DetaGridを使用し、XMLの内容を表記しています。 
・XMLファイルはPersonタグに属性(ID)を持っています。
・DataGridには行ヘッダを追加しており、行ヘッダ番号=Personの属性(ID)となるようにしています。

【XML(Member.xml)】
 <Root>
  <Person ID="001">
  <Name>AAA</Name>
  <Age>XXX</Age>
 </Person>
 <Person ID="002">
  <Name>BBB</Name>
  <Age>YYY</Age>
 </Person>
 ~省略~
 </Person>
 </Root>

【DataGrid】(見づらくなってしまい申し訳ありません。)
 | | Name | Age |
------------------------
| 1 | AAA | XXX |
-------------------------
| 2 | BBB | YYY |
-----------------------

プログラムしたい内容は、DataGridで任意の行を選択すると、選択した内容が同フォームに設置されているテキストボックスに反映されるというものです。
(1行目を選択するとテキストボックス1にAAA、テキストボックス2にXXXが表示される)

下記のように処理しようと考えておりますが②で手こずってしまいました。
 ①選択した行が何行目か取得
 ②行数=IDなので、属性からノードを指定
 ③取得した値をテキストボックスに表示
=====================================================
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Member.xmlのファイルパス);
XmlNode xmlNode = xmlDoc.SelectSingleNode(@"/Root/Person[@ID='001']/Name");
=====================================================
↑のような記述でIDが001のNameのノードの取得ができることはわかりました。
ただ、取得した行数からノードの指定を行いたいです。
行数は、
=============================================
int row = DataGrid.Items.IndexOf(DataGrid.SelectedItem);
=============================================
で、変数rowとして格納しております。
この変数rowを使用してXPathを記述したいのですが、調べても方法がわかりませんでした。
("/Root/Person[@ID='row']/Name" でやってみましたがだめでした。)

XPathは変数を使用して表記することは可能でしょうか?
不可能であれば、他にどのような方法で処理が可能でしょうか?

わかりづらい質問で申し訳ありませんが、ご回答いただけますと幸いです。

A 回答 (1件)

難しく考えてませんか?


xpathは単なる文字列
String.Formatとかでxpathを文字列として組み立てれば良いです。
rowの値を埋め込むなんて簡単です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
恥ずかしながら、String.Formatメソッドを存じ上げておりませんでした。
教えてくださってありがとうございます。

使いかたとしては↓のような感じでしょうか?
String.Format("@"/Root/Person[@ID='{0}.']/Name"", row);

すぐには確認できませんが、tknakamuri様のおっしゃるとおり、
XPathを文字列として扱う方法で再挑戦したいと思います。
ありがとうございました!

お礼日時:2018/02/27 21:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!