2014-09-21 70 views
0

我被卡住了。我不使用XML太多。但是,我需要從網站中提取一些信息,將其放入數據集中,進行一些驗證,然後將其添加到數據庫中。認爲這將是相當直接與數據集.ReadXML函數...但它不是...我得到一行和一個項目作爲我的代碼 - 服務器時間的結果。我把ds放在datagridview中來檢查它,它只顯示服務器時間。我不明白...任何幫助將不勝感激!這裏是我的代碼,它應該返回XML(有一個XmlReader功能檢查的話)XML到數據集Visual Studio 2010

Dim strISBN As String 
strISBN = "9780399155161" 

Dim strISBNDB As String = "http://isbndb.com/api/books.xml?access_key=???&results=subjects&index1=isbn&value1=" & strISBN 

Dim ds As New DataSet 
ds.ReadXml(strISBNDB) 

DataGridView1.DataSource = ds.DefaultViewManager 

XML:

<ISBNdb server_time="2014-09-21T07:06:24Z"> 
<BookList total_results="1" page_size="10" page_number="1" shown_results="1"> 
<BookData book_id="scarpetta" isbn="0399155163" isbn13="9780399155161"> 
<Title>Scarpetta</Title> 
<TitleLong></TitleLong> 
<AuthorsText>Patricia Cornwell</AuthorsText> 
<PublisherText publisher_id="g_p_putnams_sons">New York : G. P. Putnam's Sons, c2008./PublisherText> 
<Subjects> 
<Subject subject_id="literature_fiction_contemporary">Literature &amp; Fiction -- Contemporary</Subject> 
<Subject subject_id="mystery_thrillers_thrillers">Mystery &amp; Thrillers -- Thrillers</Subject> 
<Subject subject_id="scarpetta_kay_fictitious_character_fiction">Scarpetta, Kay (Fictitious character) -- Fiction</Subject> 
<Subject subject_id="medical_examiners_law_fiction">Medical examiners (Law) -- Fiction</Subject> 
<Subject subject_id="mystery_fiction">Mystery fiction</Subject> 
<Subject subject_id="forensic_pathologists_fiction">Forensic pathologists -- Fiction</Subject> 
<Subject subject_id="women_physicians_fiction">Women physicians -- Fiction</Subject> 
</Subjects> 
</BookData> 
</BookList> 
</ISBNdb> 
+0

這就是那個正在返回的xml嗎? PublisherText未正確關閉。 – Crowcoder 2014-09-21 10:19:37

+0

是。我沒有注意到這一點。可能爲什麼我得到一些錯誤。謝謝! – JimB 2014-09-21 16:57:36

回答

0

ds.ReadXml被解釋大部分元素作爲自己的DataTable的。當我用該XML運行你的代碼(正確關閉PublisherText元素)時,我得到6個數據表。你只能看到第一個,因爲它包含了server_time。 觀察DataSet的調試可視化器: enter image description here

+0

好吧......補充它......從來沒有想過它會創建多個數據表。任何方式強制xml到一個? – JimB 2014-09-21 17:00:42

+0

xml heirarchy不適合放入一張表中。如果它不是多對一的,你可以製作一個xml模式,將其加載到一個表中。 – Crowcoder 2014-09-21 19:14:19

+0

是的,這也是我的想法。猜一個循環,並添加將是我所能做的... – JimB 2014-09-22 04:14:47

1

此字符串strISBNDB不包含有效XML。事實上,它包含以下內容:

http://isbndb.com/api/books.xml?access_key=???&results=subjects&index1=isbn&value1=9780399155161

您需要獲得XML。以下是使用WebClient類的示例。

Dim ds As New DataSet 

Using client As New WebClient() 
    ds.ReadXml(client.OpenRead(strISBNDB))) 
End Using 

ds.ReadXml(strISBNDB) 
+0

感謝您的建議。我試過了,並且出現「根元素丟失」錯誤。 – JimB 2014-09-21 16:44:27