You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VB.NET和LINQ从网站抓取XML遇到问题求助

解决LINQ to XML解析MLB赛事XML数据的问题

我看了你的代码,发现几个关键问题导致你没法正确抓取并解析目标XML数据,咱们一步步来修正:

先说说你代码里的核心问题

  • 你把XML的网址直接赋值给了XNamespace,这完全搞错了用途!XNamespace是用来处理XML里的命名空间(比如<game xmlns="xxx">这种带命名空间声明的情况),而不是用来指定数据源地址的。
  • 你手动创建了一个空的XDocument,但根本没从目标URL加载真实的赛事XML数据——这就像拿着空本子想找内容,肯定找不到啊。
  • 获取元素值的时候,直接把XElement对象赋值给String变量会报错,必须用.Value属性来提取元素的文本内容。

修正后的完整代码

Public Class Form1
    Dim strXMLSource As String = "http://gd2.mlb.com/components/game/mlb/year_2018/month_03/day_29/gid_2018_03_29_anamlb_oakmlb_1/linescore.xml"
    ' 先声明XDocument,不用提前初始化空的
    Dim xml As XDocument

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        txtXMLSource.Text = strXMLSource
    End Sub

    Private Sub cmdGetData_Click(sender As System.Object, e As System.EventArgs) Handles cmdGetData.Click
        Try
            ' 从指定URL加载真实的XML数据
            xml = XDocument.Load(strXMLSource)

            ' 检查目标XML:它的根元素<game>没有声明命名空间,所以不需要XNamespace
            ' 如果后续遇到带命名空间的XML,才需要这样声明:Dim ns As XNamespace = "http://example.com/your-namespace"
            ' 获取根元素<game>
            Dim gameElement As XElement = xml.Root
            If gameElement Is Nothing Then
                MessageBox.Show("XML格式不正确,未找到根元素game")
                Return
            End If

            ' 获取<id>元素并提取它的值,同时处理元素不存在的情况
            Dim idElement As XElement = gameElement.Element("id")
            Dim strId As String = If(idElement IsNot Nothing, idElement.Value, "未找到赛事ID")

            ' 顺便给你加个<venue>的解析示例,同样做空值检查
            Dim venueElement As XElement = gameElement.Element("venue")
            Dim strVenue As String = If(venueElement IsNot Nothing, venueElement.Value, "未找到场馆信息")

            MessageBox.Show($"赛事ID:{strId}{Environment.NewLine}场馆:{strVenue}")
        Catch ex As Exception
            ' 捕获网络错误、XML格式错误等异常,方便排查问题
            MessageBox.Show($"加载或解析XML出错:{ex.Message}")
        End Try
    End Sub
End Class

关键改动说明

  1. 加载真实XML数据:用XDocument.Load(strXMLSource)直接从远程URL加载XML,替换了你手动创建的空文档。
  2. 正确处理命名空间:目标XML没有使用命名空间,所以不需要XNamespace;如果以后遇到带xmlns属性的XML,再声明XNamespace并在查找元素时用ns + "元素名"的格式。
  3. 安全获取元素值:添加了空值检查,避免元素不存在时抛出空引用异常,用If()运算符设置默认值。
  4. 异常处理:加入Try-Catch块,捕获网络请求失败、XML格式错误等问题,方便你定位错误原因。

内容的提问来源于stack exchange,提问作者Michael T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:09:09