gpt4 book ai didi

vbscript - 使用经典 ASP (VBscript) 解析 XML 时出现问题

转载 作者:行者123 更新时间:2023-12-03 06:25:42 26 4
gpt4 key购买 nike

我有以下代码,它曾经工作得很好,但现在由于某些原因却不能了。

我正在阅读的 XML 位于:https://forex.boi.org.il/currency.xml

以下代码应解析 XMl,然后保存 USD/ILS 汇率。正如我所说,它不再是了,我不知道出了什么问题。

forexURL = "https://forex.boi.org.il/currency.xml"

getUSDRate = 0
MyRate = 0

Set xmlObj = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
xmlObj.async = False
xmlObj.setProperty "ServerHTTPRequest", True
xmlObj.Load(forexURL)
Set xmlList = xmlObj.getElementsByTagName("CURRENCY")
Set xmlObj = Nothing
x = 1
For Each xmlItem In xmlList

response.write "<p>" & xmlItem.childNodes(0).text
response.write "<p>" & xmlItem.childNodes(1).text
response.write "<p>" & xmlItem.childNodes(2).text
response.write "<p>" & xmlItem.childNodes(3).text
response.write "<p>" & xmlItem.childNodes(4).text
response.write "<p>" & xmlItem.childNodes(5).text
response.write "<p>___________________<br />" & x & "</p>"

if xmlItem.childNodes(2).text = "USD" then
MyRate = xmlItem.childNodes(4).text
exit for
end if

x = x +1

Next
Set xmlList = Nothing

最佳答案

我怀疑(提前猜测)服务器端处理 SSL 的方式发生变化是导致您遇到麻烦的原因。也许他们禁用了旧的、更不安全的密码来应对最近的 SSL 错误。

就像 @John 注释一样 - 当您从 MSXML2.FreeThreadedDOMDocument (加载版本 MSXML2 版本 3)更改为显式加载更现代的版本 6 (MSXML2.FreeThreadedDOMDocument.6.0) >)则文档下载成功。

话虽这么说,我对您的代码做了一些更改,主要是为了更具可读性,并在文档加载由于某种原因失败时使其明显失败。

注意

  • XPath 的使用
  • 辅助函数 GetText() 代替盲目索引子节点
  • parseError 检查以使 LoadXmlDocument 非静默失败

.

Option Explicit

Dim usdRate, x, currencies, curr

Set currencies = LoadXmlDocument("https://forex.boi.org.il/currency.xml")
usdRate = GetText(currencies, "//CURRENCY[CURRENCYCODE = 'USD']/RATE")

x = 1
For Each curr In currencies.getElementsByTagName("CURRENCY")
Response.Write "<p>" & GetText(curr, "NAME") & "</p>"
Response.Write "<p>" & GetText(curr, "UNIT") & "</p>"
Response.Write "<p>" & GetText(curr, "CURRENCYCODE") & "</p>"
Response.Write "<p>" & GetText(curr, "COUNTRY") & "</p>"
Response.Write "<p>" & GetText(curr, "RATE") & "</p>"
Response.Write "<p>" & GetText(curr, "CHANGE") & "</p>"
Response.Write "<p>___________________<br />" & x & "</p>"
x = x + 1
Next
' ----------------------------------------------------------------------

' loads an XML document from a URL and returns it
Function LoadXmlDocument(url)
Set LoadXmlDocument = CreateObject("MSXML2.FreeThreadedDOMDocument.6.0")
LoadXmlDocument.async = False
LoadXmlDocument.setProperty "ServerHTTPRequest", True
LoadXmlDocument.setProperty "SelectionLanguage", "XPath"
LoadXmlDocument.Load url
If LoadXmlDocument.parseError <> 0 Then
Err.Raise vbObjectError + 1, _
"LoadXmlDocument", _
"Cannot load " & url & " (" & LoadXmlDocument.parseError.reason & ")"
End If
End Function

' finds the first node that matches the XPath and returns its text value
Function GetText(context, xpath)
Dim node
Set node = context.selectSingleNode(xpath)
If node Is Nothing Then
GetText = vbEmpty
Else
GetText = node.text
End If
End Function

关于vbscript - 使用经典 ASP (VBscript) 解析 XML 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com