teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

サンプルコード追加&その時の貼り付け場所訂正

2016/10/11 02:35

投稿

退会済みユーザー
answer CHANGED
@@ -4,6 +4,11 @@
4
4
 
5
5
  なので、前のスレッドの案はやめて、xml 文字列から XElement オブジェクトを作り、result_code をチェックしてエラーがあればエラー処置、無ければ XElement オブジェクトからデータを取得して表示するというようにしてはいかがですか?
6
6
 
7
+ また、多分、以下の URL にあるような郵便番号から住所を調べるようなことがしたいのだと思いますが、であれば住所を表示するのに GridView を使うのが適当かどうかは考え直した方がよさそうな気がします。
8
+
9
+ http://postcode.goo.ne.jp/
10
+
11
+
7
12
  【2016/10/11 11:30 追記】
8
13
 
9
14
  上に書いた「xml 文字列から XElement オブジェクトを作り・・・」のサンプルコードを貼っておきます。エラー処置そのものは省略しました。質問者さんの方で適切な方法を考えてください。
@@ -116,8 +121,4 @@
116
121
  </form>
117
122
  </body>
118
123
  </html>
119
- ```
124
+ ```
120
-
121
- また、多分、以下の URL にあるような郵便番号から住所を調べるようなことがしたいのだと思いますが、であれば住所を表示するのに GridView を使うのが適当かどうかは考え直した方がよさそうな気がします。
122
-
123
- http://postcode.goo.ne.jp/

1

サンプルコード追加

2016/10/11 02:35

投稿

退会済みユーザー
answer CHANGED
@@ -4,6 +4,120 @@
4
4
 
5
5
  なので、前のスレッドの案はやめて、xml 文字列から XElement オブジェクトを作り、result_code をチェックしてエラーがあればエラー処置、無ければ XElement オブジェクトからデータを取得して表示するというようにしてはいかがですか?
6
6
 
7
+ 【2016/10/11 11:30 追記】
8
+
9
+ 上に書いた「xml 文字列から XElement オブジェクトを作り・・・」のサンプルコードを貼っておきます。エラー処置そのものは省略しました。質問者さんの方で適切な方法を考えてください。
10
+
11
+ foreach のループ処置が力技的で何ですが、取りあえずのサンプルということで・・・
12
+
13
+ 代わりに Linq to XML とかを使うともっとスマートにできるかもしれません(興味がおありでしたら新たに別スレッドを立てて質問してください。ASP.NET ということでなく C# の分類にされるといいと思います)。
14
+
15
+ ```
16
+ <%@ Page Language="C#" %>
17
+ <%@ Import Namespace="System.IO" %>
18
+ <%@ Import Namespace="System.Xml.Linq" %>
19
+ <%@ Import Namespace="System.Xml.XPath" %>
20
+
21
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
22
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
23
+
24
+ <script runat="server">
25
+
26
+ string xmlString = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
27
+ <ZIP_result>
28
+ <result name=""ZipSearchXML"" />
29
+ <result version=""1.01"" />
30
+ <result request_url=""http%3A%2F%2Fzip.cgis.biz%2Fxml%2Fzip.php%3Fzn%3D1500013"" />
31
+ <result request_zip_num=""1500013"" />
32
+ <result request_zip_version=""none"" />
33
+ <result result_code=""1"" />
34
+ <result result_zip_num=""1500013"" />
35
+ <result result_zip_version=""0"" />
36
+ <result result_values_count=""1"" />
37
+ <ADDRESS_value>
38
+ <value state_kana=""トウキョウト"" />
39
+ <value city_kana=""シブヤク"" />
40
+ <value address_kana=""エビス(ツギノビルヲノゾク)"" />
41
+ <value company_kana=""none"" />
42
+ <value state=""東京都"" />
43
+ <value city=""渋谷区"" />
44
+ <value address=""恵比寿(次のビルを除く)"" />
45
+ <value company=""none"" />
46
+ </ADDRESS_value>
47
+ </ZIP_result>
48
+ ";
49
+
50
+ public class AddressValue
51
+ {
52
+ public string StateKana { get; set; }
53
+ public string CityKana { get; set; }
54
+ public string AddressKana { get; set; }
55
+ public string CompanyKana { get; set; }
56
+ public string State { get; set; }
57
+ public string City { get; set; }
58
+ public string Address { get; set; }
59
+ public string Company { get; set; }
60
+ }
61
+
62
+ protected void Page_Load(object sender, EventArgs e)
63
+ {
64
+ TextReader sr = new StringReader(xmlString);
65
+ XElement zipResult = XElement.Load(sr);
66
+ sr.Close();
67
+
68
+ if (zipResult.XPathSelectElement("result[@result_code='1']") == null)
69
+ {
70
+ // エラー処置
71
+ return;
72
+ }
73
+
74
+ List<AddressValue> list = new List<AddressValue>();
75
+
76
+ foreach (XElement address in zipResult.Elements("ADDRESS_value"))
77
+ {
78
+ AddressValue item = new AddressValue();
79
+
80
+ item.StateKana =
81
+ address.XPathSelectElement("value[@state_kana]").Attribute("state_kana").Value;
82
+ item.CityKana =
83
+ address.XPathSelectElement("value[@city_kana]").Attribute("city_kana").Value;
84
+ item.AddressKana =
85
+ address.XPathSelectElement("value[@address_kana]").Attribute("address_kana").Value;
86
+ item.CompanyKana =
87
+ address.XPathSelectElement("value[@company_kana]").Attribute("company_kana").Value;
88
+ item.State =
89
+ address.XPathSelectElement("value[@state]").Attribute("state").Value;
90
+ item.City =
91
+ address.XPathSelectElement("value[@city]").Attribute("city").Value;
92
+ item.Address =
93
+ address.XPathSelectElement("value[@address]").Attribute("address").Value;
94
+ item.Company =
95
+ address.XPathSelectElement("value[@company]").Attribute("company").Value;
96
+
97
+ list.Add(item);
98
+ }
99
+
100
+ GridView1.DataSource = list;
101
+ GridView1.DataBind();
102
+ }
103
+ </script>
104
+
105
+ <html xmlns="http://www.w3.org/1999/xhtml">
106
+ <head runat="server">
107
+ <title></title>
108
+ </head>
109
+ <body>
110
+ <form id="form1" runat="server">
111
+ <div>
112
+ <h1>郵便番号検索</h1>
113
+ <asp:GridView ID="GridView1" runat="server">
114
+ </asp:GridView>
115
+ </div>
116
+ </form>
117
+ </body>
118
+ </html>
119
+ ```
120
+
7
121
  また、多分、以下の URL にあるような郵便番号から住所を調べるようなことがしたいのだと思いますが、であれば住所を表示するのに GridView を使うのが適当かどうかは考え直した方がよさそうな気がします。
8
122
 
9
123
  http://postcode.goo.ne.jp/