C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: ASP.NETでのWEBのAPIにおけるXMLの取得について


(過去ログ 119 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■69859 / inTopicNo.1)  ASP.NETでのWEBのAPIにおけるXMLの取得について
  
□投稿者/ kazu (7回)-(2014/02/03(Mon) 07:40:03)

分類:[ASP.NET (VB)] 


Imports System.Xml
Imports System.Data

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim dataSet As DataSet = New DataSet
Dim dataTable As DataTable
Dim xmlPath As String = "http://hon.jp/rest/2.1/null/aOENZ00002/mode=jumplist"

dataSet.ReadXml(xmlPath)
For Each dataTable In dataSet.Tables
dataTable.EndLoadData()
Next
GridView1.DataSource = dataSet.Tables("book")
GridView1.DataBind()
End Sub
End Class

以上のコードで、GridView1にXMLのデータを取得しています。このコードを、http://iss.ndl.go.jp/api/opensearch?title=%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%A2%E3%83%B3%E3%83%88%E3%83%AF%E3%83%8D%E3%83%83%E3%83%88&ndc=2
このURLのXMLからデータを取得したいと希望しています。

Imports System.Xml
Imports System.Data

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim dataSet As DataSet = New DataSet
Dim dataTable As DataTable
Dim xmlPath As String = "http://iss.ndl.go.jp/api/opensearch?title=%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%A2%E3%83%B3%E3%83%88%E3%83%AF%E3%83%8D%E3%83%83%E3%83%88&ndc=2"

dataSet.ReadXml(xmlPath)
For Each dataTable In dataSet.Tables
dataTable.EndLoadData()
Next
GridView1.DataSource = dataSet.Tables("book")
GridView1.DataBind()
End Sub
End Class

このコードを試して頂くと分かりますように、XMLの構造の中に同じタグがあるとエラーが出ます。DataSetを利用したAPIの利用は、同じタグがあるXMLの構造だと難しいでしょうか?

また、別な代替案がありましたら、ぜひ、ご教授ください!

宜しくお願いします!
引用返信 編集キー/
■69860 / inTopicNo.2)  Re[1]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ kazu (8回)-(2014/02/03(Mon) 08:13:05)
2014/02/03(Mon) 08:39:20 編集(投稿者)

エラーという表示をいれて構造がずれないようにしたのですが、エラーが表示されません。これを使って帳票形式のフォームを作ろうとしましたが、ダメでした。どうして、エラーという文字が出ないのでしょうか?宜しくお願いします。
Imports System.Web
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Data
Imports System.Data.SqlClient

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim xmldoc As New XmlDocument()
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmldoc.NameTable)
nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/")
nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")
nsmgr.AddNamespace("dcndl", "http://ndl.go.jp/dcndl/terms/")


xmldoc.Load("http://iss.ndl.go.jp/api/opensearch?isbn=9784062812016")
Dim d(11) As String
Dim list As XmlNodeList
Dim node As XmlNode

list = xmldoc.SelectNodes("/rss/channel/item/dc:identifie[@xsi:type='dcndl:ISBN']", nsmgr)
For Each node In list

Select Case list.Count
Case Is = 1
d(11) = node.InnerText
TextBox11.Text = d(11)
Case Is = 0

TextBox11.Text = "エラー"
End Select

Next
End Sub

End Class

Caseの所に何か適切なものを入れて条件分岐で判断してデータを取得して、 GridView1に表示させようと考えました。
引用返信 編集キー/
■69861 / inTopicNo.3)  Re[2]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ a (7回)-(2014/02/03(Mon) 09:46:20)
No69860 (kazu さん) に返信
> 2014/02/03(Mon) 08:39:20 編集(投稿者)
>
> どうして、エラーという文字が出ないのでしょうか?
>

>Select Case list.Count
>Case Is = 0
> TextBox11.Text = "エラー"
>
のことを言っているのなら「list.Count=0」の時はFor Eachの中に入らないからです。

#全体をあまり理解してないから外してるかな?
引用返信 編集キー/
■69862 / inTopicNo.4)  Re[3]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ kazu (9回)-(2014/02/03(Mon) 11:59:47)
ありがとうございます!なるほどです。勉強になります。構造がずれないように、二重のループにするようにしました。

それから、データーベースに接続して、ループの中で、テーブルを追加するプログラムを考えています!

もしかしたら、上手く行くかもしれません!

今仕事で外回りしているので自宅に帰ったら早速試してみます。
引用返信 編集キー/
■69863 / inTopicNo.5)  Re[1]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ WebSurfer (178回)-(2014/02/03(Mon) 13:25:40)
No69859 (kazu さん) に返信
> また、別な代替案がありましたら、ぜひ、ご教授ください!

データソースコントロールの XmlDataSource を使えば簡単にできるはずです。

何を GridView に表示したいのか分かりませんが、例えば title, link, description, category
を表示する場合は、以下のようにすれば OK です。(他に、xsl 変換ファイルを使う方法もあります)


<%@ 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">

</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" 
            DataFile="http://iss.ndl.go.jp/api/opensearch?title=%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%A2%E3%83%B3%E3%83%88%E3%83%AF%E3%83%8D%E3%83%83%E3%83%88&amp;ndc=2"
            Xpath="rss/channel/item">
        </asp:XmlDataSource>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataSourceID="XmlDataSource1">
            <Columns>
                <asp:TemplateField HeaderText="Title">
                    <ItemTemplate>
                        <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# XPath("title") %>' NavigateUrl='<%# XPath("link") %>'>
                        </asp:HyperLink>                        
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Description">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# XPath("description") %>'>
                        </asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Category">                    
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# XPath("category") %>'>
                        </asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>

引用返信 編集キー/
■69867 / inTopicNo.6)  Re[2]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ kazu (10回)-(2014/02/03(Mon) 20:07:55)
2014/02/03(Mon) 20:10:55 編集(投稿者)

WebSurfer様!
ありがとうございます!

出来ればなんですが・・・
フォームにテキストボックスを配置してタイトル等を入力して取得できるXMLの内容を変えたいと思っていました。それは教えて頂いたやり方で可能でしょうか?

そこで、また懲りずに、VBの方で処理しようと考え接続しているACCESSのテーブルへデータを取得してみたのですが、XMLの先頭のレコードのみ延々と繰り返して取得してしまいました。配列の使用の仕方に問題があると思うのですが、何度やっても解決出来ません。どうか、ご教授ください。宜しくお願いします!以下、余計なものを省略したコードです。


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim cn As New OleDbConnection 'OleDbConnectionオブジェクト
Dim cmd As New OleDbCommand 'OleDbCommandオブジェクト
Dim affectedRows As Integer '更新したレコード数
' 仮想アプリケーションルートパスを取得
Dim vPath As String = Request.ApplicationPath ' 仮想アプリケーションルートパスの物理パスを取得
Dim path As String = Server.MapPath(vPath) '接続情報
Dim xmldoc As New XmlDocument()
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmldoc.NameTable)
nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/")
nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")
nsmgr.AddNamespace("dcndl", "http://ndl.go.jp/dcndl/terms/")
nsmgr.AddNamespace("dcterms", "http://purl.org/dc/terms/")
Dim nodelist As XmlNodeList
Dim node As XmlNode
Dim A() As String
Dim i As Long
i = 0
xmldoc = New XmlDocument()
xmldoc.Load("http://iss.ndl.go.jp/api/opensearch?title=%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%A2%E3%83%B3%E3%83%88%E3%83%AF%E3%83%8D%E3%83%83%E3%83%88&ndc=2")

nodelist = xmldoc.SelectNodes("/rss/channel/item/dc:title", nsmgr)
For Each node In nodelist
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
path & "\App_Data\toshokan.mdb"


ReDim A(i)

A(i) = node.InnerText
'INSERTコマンド
cmd.Connection = cn
cmd.CommandText = "INSERT INTO [T_APIデータ取得] " _
& " ([タイトル]) " _
& "VALUES (?)"

'パラメータに値を代入
cmd.Parameters.AddWithValue("[タイトル]", A(i))
'実行
cn.Open()
Try
affectedRows = cmd.ExecuteNonQuery()
Catch ex As Exception
Finally
cn.Close()
End Try
i = i + 1
Next

End Sub
引用返信 編集キー/
■69868 / inTopicNo.7)  Re[3]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ WebSurfer (179回)-(2014/02/03(Mon) 22:14:16)
No69867 (kazu さん) に返信
> 2014/02/03(Mon) 20:10:55 編集(投稿者)
>
> WebSurfer様!
> ありがとうございます!
>
> 出来ればなんですが・・・
> フォームにテキストボックスを配置してタイトル等を入力して取得できるXMLの内容を変えたいと思っていました。それは教えて頂いたやり方で可能でしょうか?
>
> そこで、また懲りずに、VBの方で処理しようと考え接続しているACCESSのテーブルへデータを取得してみたのですが、XMLの先頭のレコードのみ延々と繰り返して取得してしまいました。配列の使用の仕方に問題があると思うのですが、何度やっても解決出来ません。どうか、ご教授ください。宜しくお願いします!以下、余計なものを省略したコードです。

そんな長いコードは読む気がしません。

一体あなたは何がしたいんですか?
引用返信 編集キー/
■69869 / inTopicNo.8)  Re[4]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ kazu (11回)-(2014/02/03(Mon) 22:32:21)
2014/02/03(Mon) 22:40:16 編集(投稿者)
2014/02/03(Mon) 22:39:42 編集(投稿者)
2014/02/03(Mon) 22:39:39 編集(投稿者)

申し訳ございません。

フォームにテキストボックスを配置して、テキストボックスの内容のタイトルを検索するWEBを作ろうとしていました。

http://iss.ndl.go.jp/api/opensearch?title=%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%A2%E3%83%B3%E3%83%88%E3%83%AF%E3%83%8D%E3%83%83%E3%83%88&ndc=2

ここにアクセスすると、一番最初の<title>週刊100人 : 歴史は彼らによってつくられた</title>を延々と数十行も取得してしまうんです・・・

でも

Response.Write

でフォームに書き込むと正常に表示されます・・・

やりたいことは、XMLを1行ずつ取得して、データーベースに追加していくループなんです。わかりづらくてすみません。

WebSurfer様の教えていた方法で、テキストボックスを配置して、タイトルを入力して抽出したものを表示させる方法がありましたら是非、お願いします。

引用返信 編集キー/
■69870 / inTopicNo.9)  Re[5]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ WebSurfer (180回)-(2014/02/03(Mon) 22:49:31)
No69869 (kazu さん) に返信
> 申し訳ございません。
>
> フォームにテキストボックスを配置して、テキストボックスの内容のタイトルを検索するWEBを作ろうとしていました。
>
> http://iss.ndl.go.jp/api/opensearch?title=%E3%83%9E%E3%83%AA%E3%83%BC%E3%82%A2%E3%83%B3%E3%83%88%E3%83%AF%E3%83%8D%E3%83%83%E3%83%88&ndc=2
>
> ここにアクセスすると、一番最初の<title>週刊100人 : 歴史は彼らによってつくられた</title>を延々と数十行も取得してしまうんです・・・
>
> でも
>
> Response.Write
>
> でフォームに書き込むと正常に表示されます・・・
>
> やりたいことは、XMLを1行ずつ取得して、データーベースに追加していくループなんです。わかりづらくてすみません。

依然として意味が分かりません。あなたのやりたいことはなんですかと質問しているのですが無視ですか?
引用返信 編集キー/
■69873 / inTopicNo.10)  Re[6]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ kazu (12回)-(2014/02/04(Tue) 02:03:21)
なんども試しているんですね無理みたいですね。

他の言語では実装済みなんですよ・・・

ASP.NETでは無理なんだと思います。

あとコミュニケーション能力を身につけたほうが良いと思いますよ。

分からないことは分からないと言った方が周りに迷惑かけないと思うし。
解決済み
引用返信 編集キー/
■69878 / inTopicNo.11)  Re[7]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ 桜島 (1回)-(2014/02/05(Wed) 09:16:26)
>そんな長いコードは読む気がしません。

>一体あなたは何がしたいんですか?

>依然として意味が分かりません。あなたのやりたいことはなんですかと質問しているのですが無視ですか?

たしかにこりゃひどいわなw
解決済み
引用返信 編集キー/
■69879 / inTopicNo.12)  Re[8]: ASP.NETでのWEBのAPIにおけるXMLの取得について
□投稿者/ WebSurfer (181回)-(2014/02/05(Wed) 10:36:58)
No69878 (桜島 さん) に返信
> >そんな長いコードは読む気がしません。
>
> >一体あなたは何がしたいんですか?
>
> >依然として意味が分かりません。あなたのやりたいことはなんですかと質問しているのですが無視ですか?
>
> たしかにこりゃひどいわなw

あなたが質問者さんのやりたいことがわかると言うなら、回答を書いてはいかがですか?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -