2014-09-21 49 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