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

使用Excel VBA解析在线Web服务XML时无法读取内部节点

问题原因
  • 返回的XML携带了默认命名空间http://xmldata.qrz.com,MSXML2.DOMDocument60执行XPath查询时,必须先显式注册命名空间前缀,否则无法匹配到对应节点,所以你调用SelectNodes("QRZDatabase/Session")返回的是空节点集合,后续循环不会执行。
修复方案

你只需要在XML文档加载完成后,新增命名空间注册逻辑,同时修改XPath查询语句添加对应前缀即可,修改后的完整代码如下:

Sub test()

    '创建请求对象
    Dim xml_Obj As MSXML2.XMLHTTP60
    Set xml_Obj = New MSXML2.XMLHTTP60
    Dim baseURL As String
    Dim uName As String
    Dim pWord As String
    Dim sURL As String

    '拼接请求地址
    baseURL = "http://xmldata.qrz.com/xml/current/?"
    uName = "username=w4gfq;"
    pWord = "password=********"

    sURL = baseURL + uName + pWord

    xml_Obj.Open "GET", sURL, False
    xml_Obj.send

    Debug.Print "The request was " + xml_Obj.StatusText

    '创建XML文档对象
    Dim XDoc As MSXML2.DOMDocument60
    Dim xNodes As IXMLDOMNodeList
    Dim xNode As MSXML2.IXMLDOMNode

    Set XDoc = New MSXML2.DOMDocument60
    '关闭异步加载,确保XML完全加载后再执行后续逻辑
    XDoc.async = False
    XDoc.LoadXML xml_Obj.ResponseText
    
    '新增:检查XML加载是否出错
    If XDoc.parseError.errorCode <> 0 Then
        Debug.Print "XML加载错误:" & XDoc.parseError.reason
        Exit Sub
    End If

    Debug.Print XDoc.ChildNodes.Item(1).BaseName

    '新增:注册命名空间,自定义前缀qrz对应返回值的默认命名空间地址
    XDoc.SetProperty "SelectionNamespaces", "xmlns:qrz='http://xmldata.qrz.com'"

    '修改:XPath查询添加qrz前缀
    Set xNodes = XDoc.SelectNodes("qrz:QRZDatabase/qrz:Session")

    For Each xNode In xNodes
        Debug.Print "----------------"
        '修改:子节点查询也需要添加qrz前缀
        Debug.Print xNode.SelectSingleNode("qrz:Key").Text
    Next

End Sub
补充注意

如果运行时报错找不到MSXML2相关类型,请确认VBA编辑器的「工具-引用」中已经勾选了「Microsoft XML, v6.0」选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:18:01