经典ASP读取外部XML报‘object required: USD’错误求助
解决DOMDocument加载外部XML报“object required”问题
问题重现
本地读取XML文件的代码可正常运行:
Source = "kur.xml" Set kurlar = Server.CreateObject("msxml2.DOMDocument.6.0" ) kurlar.async = false kurlar.resolveExternals = false kurlar.setProperty "ServerHTTPRequest" ,true kurlar.load(Source) Set USD = kurlar.selectSingleNode("//Tarih_Date/Currency[@Kod = 'USD']") USDS = USD.selectSingleNode("BanknoteSelling").text Set EUR = kurlar.selectSingleNode("//Tarih_Date/Currency[@Kod = 'EUR']") EURS = EUR.selectSingleNode("BanknoteSelling").text
但将数据源替换为外部URL https://www.tcmb.gov.tr/kurlar/today.xml 时,出现“object required: 'USD'”错误——本质是kurlar.load()加载外部URL失败,导致后续节点查询返回空对象。
问题原因
虽然给DOMDocument设置了ServerHTTPRequest属性,但直接用load()加载外部HTTPS资源时,可能受服务器响应头、跨域限制或MSXML组件默认行为影响,导致XML加载失败,后续节点查询自然无法获取有效对象。
可行解决方案:用ServerXMLHTTP先获取XML内容
把“直接加载外部URL”拆成“HTTP请求获取内容 + 加载本地文本”两步,绕开DOMDocument直接加载外部资源的限制:
Source = "https://www.tcmb.gov.tr/kurlar/today.xml" ' 先用ServerXMLHTTP获取XML内容 Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") xmlHttp.Open "GET", Source, False xmlHttp.Send xmlContent = xmlHttp.ResponseText ' 再加载到DOMDocument Set kurlar = Server.CreateObject("msxml2.DOMDocument.6.0" ) kurlar.async = false kurlar.resolveExternals = false kurlar.loadXML(xmlContent) ' 后续节点查询逻辑不变 Set USD = kurlar.selectSingleNode("//Tarih_Date/Currency[@Kod = 'USD']") USDS = USD.selectSingleNode("BanknoteSelling").text Set EUR = kurlar.selectSingleNode("//Tarih_Date/Currency[@Kod = 'EUR']") EURS = EUR.selectSingleNode("BanknoteSelling").text ' 释放对象 Set xmlHttp = Nothing Set kurlar = Nothing
补充说明
此前尝试过相关方案无效,最终通过ServerXMLHTTP的方式解决问题,核心是通过独立的HTTP请求组件获取外部资源,再交给DOMDocument处理,避免了直接加载外部URL的兼容性问题。
内容的提问来源于stack exchange,提问作者zokanzi
相关产品推荐
相关产品推荐

