回答編集履歴

2

質問の更新に伴い更新

2019/01/05 16:31

投稿

kozuchi
kozuchi

スコア1193

test CHANGED
@@ -1,175 +1,5 @@
1
- ご質問内容では以下点が不明ですので、
1
+ すいません、他回答にほぼべて書かれているので、私が改めて書くべきことがありません。
2
2
 
3
- 勝手ながらこ点について推測で答えせていだきす。
3
+ とりあえず、以前回答の内容質問の内容が更新ため無効になりしたので
4
4
 
5
- 勘違い等ありまたらご容赦願います。
5
+ 削除ておきます。
6
-
7
-
8
-
9
- - xml の全体構造
10
-
11
- - 当該要素の処理(ご質問で示されたソースコードの処理)に到達するまでの処理
12
-
13
-
14
-
15
-
16
-
17
- #結論
18
-
19
-
20
-
21
- ## お望みと思われる処理が動作するプログラム
22
-
23
- ```C#
24
-
25
- using System;
26
-
27
- using System.Xml;
28
-
29
-
30
-
31
- namespace ConsoleApp1
32
-
33
- {
34
-
35
- class Program
36
-
37
- {
38
-
39
- static void Main(string[] args)
40
-
41
- {
42
-
43
- var xmln_vmresponse = new XmlDocument();
44
-
45
- xmln_vmresponse.Load(@"sample.xml");
46
-
47
- var xmlnl_list = xmln_vmresponse.SelectNodes("root/keySet/item");
48
-
49
- foreach (XmlNode item in xmlnl_list)
50
-
51
- {
52
-
53
- Console.WriteLine(item["keyName"].InnerText);
54
-
55
- }
56
-
57
- }
58
-
59
- }
60
-
61
- }
62
-
63
- ```
64
-
65
-
66
-
67
- ## こちらで勝手に補間した入力ファイル
68
-
69
-
70
-
71
- ご質問に示された内容では、
72
-
73
- ルート要素が二つ(requestId と keySet ) になってしまい、
74
-
75
- XMLパーサーが文法エラーを起こして読み込むことができませんので、こちらで勝手にルート要素を補完させてもらいました。
76
-
77
-
78
-
79
- ```XML
80
-
81
- <root>
82
-
83
- <requestId>sss</requestId>
84
-
85
- <keySet>
86
-
87
- <item>
88
-
89
- <keyName>aaa</keyName>
90
-
91
- <keyFingerprint>bbb</keyFingerprint>
92
-
93
- </item>
94
-
95
- <item>
96
-
97
- <keyName>aaaa</keyName>
98
-
99
- <keyFingerprint>ccc</keyFingerprint>
100
-
101
- </item>
102
-
103
- <item>
104
-
105
- <keyName>ddd</keyName>
106
-
107
- <keyFingerprint>eee</keyFingerprint>
108
-
109
- </item>
110
-
111
- <item>
112
-
113
- <keyName>fff</keyName>
114
-
115
- <keyFingerprint>ggg</keyFingerprint>
116
-
117
- </item>
118
-
119
- </keySet>
120
-
121
- </root>
122
-
123
- ```
124
-
125
-
126
-
127
- ## 実行結果
128
-
129
- ```
130
-
131
- aaa
132
-
133
- aaaa
134
-
135
- ddd
136
-
137
- fff
138
-
139
- ```
140
-
141
-
142
-
143
- #説明
144
-
145
- SelectNodes() は XML の階層を上からたどって、指定された要素を取得します。
146
-
147
-
148
-
149
- xmln_vmresponse の取得方法がご質問に記載されていないのではっきりしたことは言えませんが、
150
-
151
- 上記のプログラムと同様に、Load() で取得した直後のものと仮定しますと。
152
-
153
- ```C#
154
-
155
- var xmlnl_list = xmln_vmresponse.SelectNodes("keySet");
156
-
157
- ```
158
-
159
- という記述では、最上位の階層から "keySet" 要素を探します。
160
-
161
- 先に書きましたとおり、ご質問に示された XML では文法エラーになりますので、
162
-
163
- おそらく、実際のXML文書では、keySet は最上位階層の要素ではないと推測します。
164
-
165
- したがって、最上位の階層で keySet 要素を探した結果が 0 個になったのだと思われます。
166
-
167
-
168
-
169
- 上記サンプルでも、SelectNodes("keySet") とすると、得られるノード数は 0 個になります。
170
-
171
- SelectNodes("root/keySet") とすると、その階層(root 要素直下の階層)には keySet 要素が一つあるので
172
-
173
- 得られるノード数は 1 個になります。
174
-
175
- SelectNodes("root/keySet/item") とした場合に、4個の item 要素が得られます。

1

記述ミスの訂正

2019/01/05 16:31

投稿

kozuchi
kozuchi

スコア1193

test CHANGED
@@ -1,4 +1,4 @@
1
- ご質問の内容では以下の点が不明ですので、
1
+ ご質問の内容では以下の点が不明ですので、
2
2
 
3
3
  勝手ながらこの点については推測で答えさせていただきます。
4
4
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  - xml の全体構造
10
10
 
11
- - 当該要素に到達するまでの処理
11
+ - 当該要素の処理(ご質問で示されたソースコードの処理)に到達するまでの処理
12
12
 
13
13
 
14
14
 
@@ -72,7 +72,7 @@
72
72
 
73
73
  ルート要素が二つ(requestId と keySet ) になってしまい、
74
74
 
75
- XMLパーサーが文法エラーを起こして読み込むことができませんので、こちらで勝手にルート要素を補させてもらいました。
75
+ XMLパーサーが文法エラーを起こして読み込むことができませんので、こちらで勝手にルート要素を補させてもらいました。
76
76
 
77
77
 
78
78