You need to enable JavaScript to run this app. DOMDocument60中带time属性Cube节点的XPath查询失效
优惠活动
大模型
产品
解决方案
定价
更多

DOMDocument60中带time属性Cube节点的XPath查询失效

问题根因

旧版MSXML2.DOMDocument(3.0版本)的节点选择逻辑不遵循W3C命名空间规则,而DOMDocument60的XPath实现完全符合标准,二者行为差异是查询结果异常的核心原因。

你解析的ECB汇率XML根节点声明了默认命名空间http://www.ecb.int/vocabulary/2002-08-01/eurofxref,所有Cube节点均归属该命名空间。根据XPath规范,无前缀的节点名仅匹配无命名空间的节点,你使用的//Cube[@time]只会查找不属于任何命名空间的Cube节点,因此返回结果恒为0。

旧版DOMDocument直接按节点名称匹配,忽略命名空间约束,所以相同语句可正常运行。

修复方案

需先给DOMDocument60注册目标节点所属的命名空间前缀,再使用带前缀的XPath查询,具体修改两处:

  • 为xDoc60设置SelectionNamespaces属性,绑定汇率节点对应的命名空间
  • 修改XPath语句,使用注册的前缀指定节点

修改后的核心代码:

With xDoc60
    .async = False
    .validateOnParse = False
    ' 注册命名空间,自定义前缀为ecb
    .SelectionNamespaces = "xmlns:ecb='http://www.ecb.int/vocabulary/2002-08-01/eurofxref'"
    .LoadXML (strXML)
End With

' 使用带前缀的XPath语句查询
Set xNodeList60 = xDoc60.SelectNodes("//ecb:Cube[@time]")
补充说明
  • 若后续需查询gesmes前缀对应的节点,可在SelectionNamespaces中追加该命名空间的注册规则
  • 无需修改旧版xDoc的相关逻辑,其本身的非标准匹配行为可正常工作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 11:15:05