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

VBScript使用loadXML解析XML文件未返回预期结果求助

VBScript使用loadXML解析XML文件未返回预期结果求助

看起来你在写VBScript解析汇率XML文件的时候遇到瓶颈了,我来帮你梳理下问题所在,再给你调整后的代码方案~

首先看你的代码,核心问题出在XPath的使用逻辑上:

  • 你通过getElementsByTagName("tecaj")拿到了所有<tecaj>节点,然后在循环里用绝对路径//tecajnica[@datum]去查找,这会从XML根节点重新开始搜索,而不是从当前<tecaj>节点的上下文找父节点,这肯定拿不到你想要的对应关系
  • 另外,汇率日期datum是在<tecajnica>节点上的,这个节点是所有<tecaj>的父节点,其实不需要每次循环都重新获取,一次性拿到就好

先假设你的XML结构大概是这样的(根据你的代码推断):

<tecajnica datum="2024-05-20">
  <tecaj oznaka="EUR">7.532</tecaj>
  <tecaj oznaka="USD">7.015</tecaj>
  ...
</tecajnica>

那调整后的代码应该是这样的:

Dim oXml, b, tecajnicaNode, tecajNodes, i, ExDate, ExCurrency, ExRate

Set oXml = CreateObject("MSXML2.DOMDocument")
oXml.async = false
oXml.validateOnParse = false ' 如果XML没有DTD可以关掉验证,加快加载
b = oXml.load("C:\Tecajnica\dtecbs.xml")

If Not b Then
    WScript.Echo "加载XML失败:" & oXml.parseError.reason
    WScript.Quit
End If

' 先拿到根节点tecajnica,一次性获取日期
Set tecajnicaNode = oXml.selectSingleNode("//tecajnica")
If Not tecajnicaNode Is Nothing Then
    ExDate = tecajnicaNode.getAttribute("datum")
    WScript.Echo "汇率日期:" & ExDate
Else
    WScript.Echo "未找到tecajnica节点"
    WScript.Quit
End If

' 获取所有tecaj节点
Set tecajNodes = oXml.getElementsByTagName("tecaj")
For i = 0 To tecajNodes.length - 1
    Set currentTecaj = tecajNodes.item(i)
    ' 直接从当前tecaj节点获取货币代码
    ExCurrency = currentTecaj.getAttribute("oznaka")
    ' 这里假设汇率值是tecaj节点的文本内容,根据你的XML结构调整
    ExRate = currentTecaj.text
    
    ' 这里可以加代码把ExDate、ExCurrency、ExRate写入数据库
    WScript.Echo "货币:" & ExCurrency & ",汇率:" & ExRate & ",日期:" & ExDate
Next

给你解释下关键的修改点:

  • 先一次性获取<tecajnica>节点,拿到全局的汇率日期,不用在循环里重复查找,效率更高
  • 遍历<tecaj>节点时,直接从当前节点获取属性和内容,不用绕弯路用绝对XPath,避免上下文错误
  • 增加了XML加载失败的错误提示,方便你排查文件路径、XML格式错误
  • 去掉了冗余的XPath绝对路径调用,改用更直接的节点属性访问

另外你需要确认你的XML结构是否和我假设的一致,如果<tecaj>节点的汇率值不是文本内容,而是存放在子节点里,那你再调整对应的节点获取逻辑就行。

备注:内容来源于stack exchange,提问作者Mila Kotnik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:43:06