用vbscript解析xml

时间:2014-10-01 15:10:11

标签: xml vbscript

您好我想解析xml中的特定信息。在那个xml代码中我想阅读US DOLLAR的ForexBuying。我收到msgbox的美国美元,但我想看看它的ForexBuying

我是vbscript的新手,请帮帮我

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>

2 个答案:

答案 0 :(得分:2)

只需使用XPath(正确,请参阅here)。如:

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

输出:

cscript 26144567.vbs
ForexBuying: 2.2829

答案 1 :(得分:1)

无论Ekkehard.Horner的答案有多好,这是你的解决方案:

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

输出:

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