回答編集履歴

1

追記

2022/08/19 04:47

投稿

退会済みユーザー
test CHANGED
@@ -2,3 +2,41 @@
2
2
 
3
3
  XML ファイルを DataGridView に表示
4
4
  http://surferonwww.info/BlogEngine/post/2019/04/26/show-content-of-xml-file-on-datagridview.aspx
5
+
6
+ ---
7
+
8
+ **【追記】**
9
+
10
+ 質問に追記した追加情報、
11
+
12
+ > XMLファイルから特定の値だけを取得して、オブジェクトに入れて活用したいおもっています。
13
+ > XMLファイルは複数あり平均300万行ぐらいの情報はあります。
14
+
15
+ で、「特定の値」というのは「サンプルXML」にある地図名、大字コードなどの要素の値で、「オブジェクト」というのはその「特定の値」から Subject クラスを初期化してオブジェクトを作りたいという話と理解しました。
16
+
17
+ とすると、上の記事で紹介したように単純に DataSet.ReadXml メソッドで XML ファイルからデータを DataSet に読み込むという方法ではダメでした。
18
+
19
+ 質問者さんのコードの xdox.Root.Elements() で「サンプルXML」から取得できるのは以下のようになります。なので、それから .Select(x => new Subject { ... }) などとしても望む「オブジェクト」は取得できません。
20
+
21
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-19/ae2d4277-9dc3-475f-8007-40a8e192fb21.jpeg)
22
+
23
+ 以下のコードのようにしないとダメです。(Oaza と Choume に該当する XML の要素が不明ですのでそれらはスキップしてます)
24
+
25
+ ```
26
+ XNamespace aw = "http://www.moj.go.jp/MINJI/tizuxml";
27
+ XElement root = xdox.Root;
28
+ Subject subject = new Subject
29
+ {
30
+ HituCD = root.Element(aw + "地図名").Value,
31
+ OazaCode = root.Element(aw + "主題属性").Element(aw + "筆").Element(aw + "大字コード").Value,
32
+ //Oaza = ?
33
+ ChoumeCode = root.Element(aw + "主題属性").Element(aw + "筆").Element(aw + "丁目コード").Value,
34
+ //Choume = ?
35
+ CoazaCode = root.Element(aw + "主題属性").Element(aw + "筆").Element(aw + "小字コード").Value,
36
+ Coaza = root.Element(aw + "主題属性").Element(aw + "筆").Element(aw + "小字名").Value,
37
+ Chiban = root.Element(aw + "主題属性").Element(aw + "筆").Element(aw + "地番").Value
38
+ };
39
+ ```
40
+ 結果は以下のようになります。
41
+
42
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-19/e88f5f92-eedb-4a66-bbc6-bc840946bfdc.jpeg)