質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

2529閲覧

xmlのクラスへの展開方法

doremifa

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/10/08 12:25

編集2016/10/08 12:28

###実現したいこと
お世話になります。
GETリクエストに対して返ってくるXMLをグリッドビューに展開したいのですが
ネットで調べても今一つ理解できず、止まってしまっています。

やりたいこと
1.ボタンクリックでGETを送信(ここはできてる)
2.かえってきたXMLをグリッドビューに展開

また、勉強用に郵便番号検索APIを利用してコードの検証をしていますが
これは1階層でうけとれそうですが本当はもっと階層のあるものを受け取りたいです。
(クラスを配列でもつようなイメージをしてます)

###ボタンの処理

string url = "http://zip.cgis.biz/xml/zip.php";//郵便番号検索API WebClient wc = new WebClient(); NameValueCollection nvc = new NameValueCollection(); nvc.Add("zn", "1500013");//恵比寿 wc.QueryString = nvc; byte[] res = wc.DownloadData(url); string resGetData = System.Text.Encoding.UTF8.GetString(res); //ここで展開してグリッドビューに格納したいです。 //いったんクラスに展開してそれをグリッドビューにできるかな?と考えています

###格納予定のクラス例

public class xml { public string name { get; set; } //アプリケーション名称 public string request_zip_version { get; set; } //リクエストされた郵便番号形式。 }

###試したこと
Linkq_xmlというものをやろうとしましたが一度もコンパイルが通りませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
ドットネットフレームワーク4.5.2
C#

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

取得したXML形式の文字列をデシリアライズすることで、オブジェクトとして扱うことが出来ます。
http://dobon.net/vb/dotnet/file/xmlserializer.html

ライブラリを使うなど詳細な方法は多岐にわたると思いますが、シリアライズ・デシリアライズを調べてみてください。

投稿2016/10/08 15:08

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doremifa

2016/10/09 07:44

ありがとうございます。 本当は両名ともベストアンサーとしたいところですが 一人しか選べないので今回はサンプルまでくださったSurferOnWwwさんに させてください。
guest

0

ベストアンサー

xml から DataSet / DataTable を作って、それを GridView にバインドしてはいかがでしょう?

xml から DataSet / DataTable を作る方法は xml datatable などをキーワードにググると多々ヒットしますので、ご自分で調べてみてください。いろいろ参考になる記事が見つかると思います。

【2016/10/9 9:10 追記】

XmlDataSource を使って、その Data プロパティに文字列を設定するサンプルを追記しておきます。

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { XmlDataSource1.Data = @" <?xml version=""1.0"" encoding=""utf-8"" ?> <Products> <Product ProductID=""1"" ProductName=""Chai"" QuantityPerUnit=""10 boxes x 20 bags"" UnitPrice=""18.0000"" UnitsInStock=""39"" /> <Product ProductID=""2"" ProductName=""Chang"" QuantityPerUnit=""24 -12 oz bottles"" UnitPrice=""19.0000"" UnitsInStock=""17"" /> <Product ProductID=""3"" ProductName=""Aniseed Syrup"" QuantityPerUnit=""12 -550 ml bottles"" UnitPrice=""10.0000"" UnitsInStock=""13"" /> <Product ProductID=""4"" ProductName=""Chef Anton's Cajun Seasoning"" QuantityPerUnit=""48 - 6 oz jars"" UnitPrice=""22.0000"" UnitsInStock=""53"" /> <Product ProductID=""5"" ProductName=""Chef Anton's Gumbo Mix"" QuantityPerUnit=""36 boxes"" UnitPrice=""21.3500"" UnitsInStock=""0"" /> </Products> "; } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:XmlDataSource ID="XmlDataSource1" runat="server"> </asp:XmlDataSource> <asp:GridView ID="GridView1" runat="server" DataSourceID="XmlDataSource1" AutoGenerateColumns="False"> <Columns> <asp:BoundField HeaderText="ProductID" DataField="ProductID" SortExpression="ProductID"> </asp:BoundField> <asp:BoundField HeaderText="ProductName" DataField="ProductName" SortExpression="ProductName"> </asp:BoundField> <asp:BoundField HeaderText="QuantityPerUnit" DataField="QuantityPerUnit" SortExpression="QuantityPerUnit"></asp:BoundField> <asp:BoundField HeaderText="UnitPrice" DataField="UnitPrice" SortExpression="UnitPrice"></asp:BoundField> <asp:BoundField HeaderText="UnitsInStock" DataField="UnitsInStock" SortExpression="UnitsInStock"></asp:BoundField> </Columns> </asp:GridView> </div> </form> </body> </html>

投稿2016/10/08 13:12

編集2016/10/09 00:10
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doremifa

2016/10/08 15:49

頂いたヒントをもとにいろいろやってみましたが以下のところでどうしてもエラーになってしまいます。 一度XMLファイルをつくって読み込まなければだめなのでしょうか。 -修正コード-- string url = "http://zip.cgis.biz/xml/zip.php"; WebClient wc = new WebClient(); NameValueCollection nvc = new NameValueCollection(); nvc.Add("zn", "1500013"); wc.QueryString = nvc; byte[] res = wc.DownloadData(url); string resdata = System.Text.Encoding.UTF8.GetString(res); XmlDataDocument myxml = new XmlDataDocument(); //ここがエラーになる myxml.DataSet.ReadXml(resdata); GridView1.DataSource = myxml.DataSet; //GridView1.DataMember = "";
退会済みユーザー

退会済みユーザー

2016/10/09 00:07

コードを書いて変換するのが難しければ、XmlDataSource を使って、その Data プロパティに文字列を設定するという手もあります。サンプルを回答欄に書いておきます。これが NG でしたら、どこが問題かを連絡ください。
doremifa

2016/10/09 07:47

サンプルありがとうございます。 いただいたコードは正常ですがXMLの部分を私のロジックに変えると 問題が発生します。 問題を取り違えておりまして私ができていないのはXMLを返してくるwebサービスへの対応方法のようです。 これ以上ここで掘り下げるのは違う気がするので別途質問を起こしたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問