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は変数を使用して表記することは可能でしょうか?
不可能であれば、他にどのような方法で処理が可能でしょうか?
わかりづらい質問で申し訳ありませんが、ご回答いただけますと幸いです。
No.1ベストアンサー
- 回答日時:
難しく考えてませんか?
xpathは単なる文字列
String.Formatとかでxpathを文字列として組み立てれば良いです。
rowの値を埋め込むなんて簡単です。
ご回答ありがとうございます。
恥ずかしながら、String.Formatメソッドを存じ上げておりませんでした。
教えてくださってありがとうございます。
使いかたとしては↓のような感じでしょうか?
String.Format("@"/Root/Person[@ID='{0}.']/Name"", row);
すぐには確認できませんが、tknakamuri様のおっしゃるとおり、
XPathを文字列として扱う方法で再挑戦したいと思います。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:16
- IT・エンジニアリング ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:17
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- JavaScript gasについて 1 2022/05/31 21:51
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
昔Winnyってありましたけど、あ...
-
SNMP リンクダウンとノードダ...
-
あるノードリストに、特定の名...
-
コンテキストメニュークリック...
-
ルート要素ノードが2個ある場合?
-
ノードとは
-
ツリービューの使い方が・・・
-
vbsのDOMDocumentで要素のText...
-
同じタグ名の項目取得
-
XMLで要素が記述された順番に意...
-
バッチファイルでテキストファ...
-
あせんうぶり言語
-
XSLで、XMLの空タグを制御したい。
-
VB6でXMLを作成しているのです...
-
HTTPステータス 404 - There is...
-
ノードの並び替え
-
Listからのnull要素を削除方法は?
-
このエラー、何とかなりません...
-
html→xmlの変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
昔Winnyってありましたけど、あ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
あるノードリストに、特定の名...
-
同じタグ名の項目取得
-
コンテキストメニュークリック...
-
ノードとは
-
XML文書の指定した属性値を持つ...
-
ツリービューのノードをダブル...
-
2分探索木の高さを求めるプロ...
-
C# TreeView 効率良いノード追...
-
VB6.0でDOMを使用して...
-
スケールフリーネットワークをC...
-
C#でtreeviewの指定ノードを選...
-
複数のマックPCによる数値計算...
-
TreeViewに重複する値をセット
-
ツリービューの使い方が・・・
-
各ノードの行数取得
-
TreeViewの再表示のちらつきを...
おすすめ情報