【问题标题】:VB.NET XML get valuesVB.NET XML 获取值
【发布时间】:2018-02-12 12:54:23
【问题描述】:

大家好。

我从 Musicbrainz 网络服务收到以下 XML 响应:http://musicbrainz.org/ws/2/artist/5dedf5cf-a598-4408-9556-3bf3f149f3ba?inc=url-rels%20artist-rels&fmt=xml

如何获取“乐队成员”下节点的值:“开始”、“结束”、“属性(艺术家演奏的乐器)”、“排序名称”和“艺术家 ID”?

到目前为止,我得到了以下内容:

Dim fullURL As String = "Http://localhost:5000/ws/2/artist/5dedf5cf-a598-4408-9556-3bf3f149f3ba?inc=url-rels%20artist-rels&fmt=xml"

Dim mBrainz = XElement.Load(fullURL)

' pruebas desde aqui

Dim root As XElement = XElement.Load(fullURL)

localhost,因为我在 VM 机器上获得了 MB 数据库的本地副本。

我对 XML 还很陌生,这已经让我困了好几个星期了。我四处搜索,但我可以找到一个节点值的解决方案,但它不会进一步获取诸如艺术家 ID 之类的值。

我们的想法是获取乐队的所有成员 - 从何时到何时演奏乐器并获取他们的 ID,以便我可以依次搜索此人以找出他曾是哪些乐队的成员。

我需要将这些值中的每一个都分配给局部变量,以便稍后处理并保存在数据库中。

非常感谢您的任何启发。

胡安

【问题讨论】:

  • 我建议你看看反序列化。这使您可以将 xml 转换为已知的对象模型,以便您可以轻松地参考 metadata.artist.name 之类的内容来获取 WhiteSnake。
  • 我将从设计您的数据库表开始。然后将xml解析到表中。然后决定是否要使用需要类匹配 xml 结构的 xml 反序列化,或者是否要创建类似于 Mark 的 LINQPad 解决方案的自定义序列化方法。我可以使用 Net Library xml linq 来做 Mark 在 linqpad 中所做的事情。
  • 嗨,非常感谢这个解决方案。我不知道 VB 中的序列化/反序列化,并在文档中查看它为我打开了一个关于数据操作的全新世界。在 VS 中有一个我不知道的 neet 工具,它可以粘贴 xml 并创建类。整晚都在努力,这太棒了。我已经有了数据库结构。我只是需要这些信息。

标签: xml vb.net


【解决方案1】:

由于返回的 XML 有一个命名空间,你首先需要导入它,然后你可以使用一个简单的 LINQ to XML 查询来提取你想要的数据:

Imports <xmlns:mb = "http://musicbrainz.org/ns/mmd-2.0#">

Dim xml = XDocument.Load(fullURL) ' Use XDocument, since it has an XML declaration
Dim result =
    From e In xml.Root...<mb:relation>
    Where e.@type = "member of band"
    Select
        Begin = e.<mb:begin>.Value,
        [End] = e.<mb:end>.Value,
        Instrument = e.<mb:attribute-list>.<mb:attribute>.Value,
        Name = e.<mb:artist>.<mb:sort-name>.Value,
        ArtistID = e.<mb:artist>.@id

结果(转储到 LINQPad 中):

【讨论】:

  • 就是这样!非常感谢。非常干净和直截了当。我对命名空间一无所知,所以我必须阅读更多关于它的信息。非常感谢。我没有足够的票给你,但你有我的尊重,先生。谢谢
猜你喜欢
  • 2018-11-18
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多