xml parse with vbscript

限于喜欢 提交于 2020-01-30 11:41:26

问题


Hello i want to parse a specific info from xml. In that xml code i want to read ForexBuying of the US DOLLAR. I get msgbox when it's US DOLLAR but i want to see its ForexBuying

I am quite new in vbscript please help me

Sub GetExchangeRate()
    Dim xmlDoc, Currencyy, plot, ForexBuying

    Set xmlDoc = CreateObject("Msxml2.DOMDocument")
    xmlDoc.load("......\exchange.xml")

    Set Currencyy = xmlDoc.getElementsByTagName("CurrencyName")

    If Currencyy.length > 0 Then
        For Each x In Currencyy
            If x.text="US DOLLAR" Then
                MsgBox(x.Text)
            End If
        Next
    Else
        MsgBox("Parse Error")
    End If
End Sub

Call GetExchangeRate()

XML:

<Tarih_Date Tarih="01.10.2014" Date="10/01/2014" Bulten_No="2014/189">
    <Currency CrossOrder="0" Kod="USD" CurrencyCode="USD">
        <Unit>1</Unit>
        <Isim>ABD DOLARI</Isim>
        <CurrencyName>US DOLLAR</CurrencyName>
        <ForexBuying>2.2829</ForexBuying>
        <ForexSelling>2.2871</ForexSelling>
        <BanknoteBuying>2.2813</BanknoteBuying>
        <BanknoteSelling>2.2905</BanknoteSelling>
        <CrossRateUSD>1</CrossRateUSD>
        <CrossRateOther></CrossRateOther>
    </Currency>
    <Currency CrossOrder="1" Kod="AUD" CurrencyCode="AUD">
        <Unit>1</Unit>
        <Isim>AVUSTRALYA DOLARI</Isim>
        <CurrencyName>AUSTRALIAN DOLLAR</CurrencyName>
        <ForexBuying>1.9833</ForexBuying>
        <ForexSelling>1.9962</ForexSelling>
        <BanknoteBuying>1.9742</BanknoteBuying>
        <BanknoteSelling>2.0082</BanknoteSelling>
        <CrossRateUSD>1.1484</CrossRateUSD>
        <CrossRateOther></CrossRateOther>
    </Currency>
</Tarih_Date>

回答1:


No matter how good is Ekkehard.Horner's answer, here is your-style solving:

option explicit
On Error GoTo 0
Dim strResult: strResult = Wscript.ScriptName
Sub GetExchangeRate()
    dim xmlDoc, Currencyy, plot, FxBuying, xx, fx
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.load("....\exchange.xml")
Set Currencyy = xmlDoc.getElementsByTagName("CurrencyName")
If Currencyy.length > 0 then
    For each xx in Currencyy
        if xx.text="US DOLLAR" then
          strResult = strResult & vbNewLine & xx.TagName & "=" & xx.Text
          Set FxBuying = xx.parentNode.getElementsByTagName("ForexBuying")
          If FxBuying.length > 0 then
            For each fx in FxBuying
              strResult = strResult & vbTab & fx.TagName & "=" & fx.Text
            Next 
          Else 
            strResult = strResult & vbTab & "no value"
          End If
        end if
    Next
else
    strResult = strResult & vbNewLine & "Parse Error"
End If
End Sub
Call GetExchangeRate()
Wscript.Echo strResult
Wscript.Quit

Output:

cscript.exe //NoLogo "W3138975.vbs"
W3138975.vbs
CurrencyName=US DOLLAR  ForexBuying=2.2829



回答2:


Just use XPath (properly, see here). As in:

Dim oFS      : Set oFS      = CreateObject("Scripting.FileSystemObject")
Dim sFSpec   : sFSpec       = oFS.GetAbsolutePathName("..\testdata\xml\26144567.xml")
Dim objMSXML : Set objMSXML = CreateObject("Msxml2.DOMDocument")
objMSXML.setProperty "SelectionLanguage", "XPath"
objMSXML.async = False
objMSXML.load sFSpec

If 0 = objMSXML.parseError Then
   Dim sXPath   : sXPath       = "/Tarih_Date/Currency[CurrencyName = ""US DOLLAR""]/ForexBuying"
   Dim ndDollar : Set ndDollar = objMSXML.selectSingleNode(sXPath)
   If ndDollar Is Nothing Then
      WScript.Echo sXPath, "failed"
   Else
      WScript.Echo "ForexBuying:", ndDollar.text
   End If
Else
   WScript.Echo objMSXML.parseError.reason
End If

output:

cscript 26144567.vbs
ForexBuying: 2.2829


来源:https://stackoverflow.com/questions/26144567/xml-parse-with-vbscript

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!