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

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

新規登録して質問してみよう
ただいま回答率
85.35%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1179閲覧

非同期  LINQ TO XMLについて

ikemonnn

総合スコア5

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

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

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

2クリップ

投稿2021/08/21 05:06

編集2021/08/21 06:03

前提・実現したいこと

XML形式で書かれているAPIのデータを取得しようと思っています。
しかし、コンソールウインドウに何も表示されません。
調べてみるとおそらく、URLを待たせる処理を書かないといけないとのこと。
XML形式のAPIを取得するために使う非同期処理の方法を教えていただけますでしょうか。

URL

https://slib.net/api/summary/work_coun

<result xmlns="urn:slib:net:api:summary"> <version>1.3</version> <work_count>44032</work_count> <work_page_count>441</work_page_count> <work_mod_date>2021-08-21T12:21:53+09:00</work_mod_date> <author_count>20547</author_count> <author_page_count>206</author_page_count> <author_mod_date>2021-08-21T01:51:55+09:00</author_mod_date> </result>

該当のソースコード

C#

1class Program 2 { 3 static void Main(string[] args) 4 { 5 var url = XDocument.Load("https://slib.net/api/summary"); 6 var names = url.Descendants("result").Select(p => p.Element("work_count")?.Value); 7 //names は IEnumerable<XElement> 8 foreach (var name in names) 9 { 10 Console.WriteLine(names); 11 } 12 13 } 14 }

試したこと

XML形式のファイルを取得する内容しかネットにありません。
外部のAPIからXML形式のデータを取得する方法を教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

windows
.NET Framework 4.7.2

ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/08/21 05:48

> var url = XDocument.Load("https://slib.net/api/summary"); 上記はどういうつもりで書いたのですか? 引数の URL に HTTP 通信でアクセスして xml データを取得して XDocument オブジェクトを作る? そういう Load メソッドのオーバーロードがあるのですか?
退会済みユーザー

退会済みユーザー

2021/08/21 05:51

開発環境を書いてください。OS, Visual Studio のバージョン、.NET Framework or Core どっちかとそのバージョンなど。
退会済みユーザー

退会済みユーザー

2021/08/21 06:11

一つ目の質問「どういうつもりで書いたのか」に対する答えも書いてください。
退会済みユーザー

退会済みユーザー

2021/08/21 06:20 編集

そもそもローカルにそのURLのXMLを保存して、そのコードで期待通りの動きになるのでしょうか?もしローカルのXMLでダメなら、非同期云々は関係ないと思いますけど。 あと、デバッグで実行して変数の値を確認しましたか?確認しているなら、XMLが取得出来ているかどうかくらいは判りますよね。自分で出来る必要最低限のデバッグくらいはしましょうよ。
退会済みユーザー

退会済みユーザー

2021/08/21 06:15

レスが前後してしまいました。「引数の URL に HTTP 通信でアクセスして xml データを取得して XDocument オブジェクトを作る」ということですね。
ikemonnn

2021/08/21 06:21

>レスが前後してしまいました。「引数の URL に HTTP 通信でアクセスして xml データを取得して >XDocument オブジェクトを作る」ということですね。 はい!その目的で書きました。 >そもそもローカルにそのURLのXMLを保存して、そのコードで期待通りの動きになるのでしょうか? 知識不足ですいません。 なると思って書いています。
退会済みユーザー

退会済みユーザー

2021/08/21 06:22

思うじゃダメです。実際に実行して確認してください。
ikemonnn

2021/08/21 07:46

>思うじゃダメです。実際に実行して確認してください。 確認しました。変数には入っていました。
guest

回答1

0

ベストアンサー

質問者さんのコードをそのままコピペして試してみましたが、

var url = XDocument.Load("https://slib.net/api/summary");

で、API から応答は返ってきていて、XDocument オブジェクトも生成されます。問題はその後です。デバッグしてみればすぐわかるはずです。

イメージ説明

投稿2021/08/21 06:34

編集2021/08/21 06:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ikemonnn

2021/08/21 08:02

ありがとうございます!! https ~ 取得はできていて、問題はnamesからどうやって中身のタグを取得するかですね。 もう一度そこから考えてみます ありがとうございます!!
退会済みユーザー

退会済みユーザー

2021/08/21 09:28

> 問題はnamesからどうやって中身のタグを取得するかですね。 いえ違います。回答の画像の names を見てください。何も取得できてないのが分かりませんか? url まではきちんと取得できてます。なので、問題は url から情報を取得するための Linq のメソッド式、即ち、以下の部分です。 .Descendants("result").Select(p => p.Element("work_count")?.Value); よく考えてみてください。
退会済みユーザー

退会済みユーザー

2021/08/21 09:36

ところで、質問に書いてあった、 > 調べてみるとおそらく、URLを待たせる処理を書かないといけないとのこと。 は見当違いであることは理解できましたか? 「URLを待たせる処理」は必要ないので、 > XML形式のAPIを取得するために使う非同期処理の方法を教えていただけますでしょうか。 API から XML データを取得するために「非同期処理の方法」も必要ないことも理解できましたか? そのあたりが理解できましたら、このスレッドの問題・課題は上の回答で解決済みですので、このスレッドはクローズしてください。 上記コードの変数 url から情報を取得するための Linq のメソッド式に質問があれば、新たに別のスレッドを立てて質問願います。
ikemonnn

2021/08/21 16:00

お返事が遅くなりまして申し訳ございません。 ありがとうございます。理解いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問