【问题标题】:XML to dataset Visual Studio 2010XML 到数据集 Visual Studio 2010
【发布时间】:2014-09-21 10:03:44
【问题描述】:

我被困住了。我不怎么使用 XML。但是,我需要从网站中提取一些信息,将其放入数据集中,进行一些验证,然后将其添加到数据库中。认为使用 dataset.ReadXML 函数这将非常简单......但事实并非如此......由于我的代码 - 服务器时间,我得到了一行和一项。我将 ds 放在 datagridview 中只是为了检查它,它只显示服务器时间。我不明白...任何帮助将不胜感激!这是我的代码和它应该返回的 xml(使用 xmlreader 函数检查)

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>

【问题讨论】:

  • 这正是返回的 xml 吗? PublisherText 未正确关闭。
  • 是的。我没有注意到。可能是为什么我会遇到一些错误。谢谢!

标签: xml vb.net visual-studio-2010


【解决方案1】:

此字符串 strISBNDB 不包含有效的 XML。实际上,它包含以下内容:

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

您需要获取XML。这是一个使用 WebClient 类的示例。

Dim ds As New DataSet

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

ds.ReadXml(strISBNDB)

【讨论】:

  • 感谢您的建议。我试过了,我得到一个错误“缺少根元素”。
【解决方案2】:

ds.ReadXml 将大部分元素解释为它们自己的 DataTable。当我使用该 XML(PublisherText 元素正确关闭)运行您的代码时,我得到 6 个数据表。您只能查看第一个,因为它包含 server_time。 观察 DataSet 的调试可视化工具:

【讨论】:

  • 好吧...该死...我从来没有想过它会创建多个数据表。有什么方法可以强制 xml 合二为一?
  • 那个 xml 层次结构不适合一张表。如果不是多对一 ,您可能会制作一个 xml 模式,将其加载到一个表中。
  • 是的,我也是这么想的。猜一个循环并添加将是我所能做的......
猜你喜欢
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
相关资源
最近更新 更多