簡體   English   中英

MS Access VB XML解析問題

[英]MS Access VB XML Parsing issue

我正在嘗試在MS Access中創建一個表單,該表單允許用戶將地址發送給USPS進行驗證並獲取正確的地址。 我的大部分工作都可以使用,但是對於XML和解析是新手,我正在使用在其他地方找到的代碼並試圖使其正常工作。 我已經能夠發送數據並使用XML接收回響應。 但是我不知道如何解析出節點。 示例我將有一個表單,其中一個人將地址1、2,城市,州,郵編等放入…。我希望結果返回這些表單字段,或者至少返回到這些字段旁邊的文本框中。 作為測試,我可以顯示從USPS獲得的結果,但顯然其中包括XML代碼。 所以現在我只需要從XML中解析出數據並顯示出來即可。 但是我不能只獲得我想要的數據。 例如,假設我要從代碼中獲取地址1,城市,zip5。 就發送數據和接收固定地址而言,這就是我所擁有的。 但是同樣,我似乎無法取出數據。

我懷疑基於先前的錯誤設置cstrXpath不正確。 現在,下面的代碼確實顯示了包含完整結果的msgbox,包括代碼AT MsgBox myDom.XML,但未顯示僅顯示地址和zip5的消息。

Private Sub Command0_Click()


Const cstrXPath As String = "/Address:Address1/Address2/City/State/Zip5/Zip4"

Dim myDom As MSXML2.DOMDocument
Dim xmlElement As MSXML2.IXMLDOMElement
Dim xmlSelection As MSXML2.IXMLDOMSelection
Dim i As Long
Dim myXML As String

 myXML = "http://production.shippingapis.com/ShippingAPITest.dll?API=Verify&XML=" & _
    "<AddressValidateRequest%20USERID=" & Chr(34) & "XXXXXXACCOUNTXX" & Chr(34) & "><Address>" & _
    "<Address1></Address1>" & _
    "<Address2>6406 Ivy Lane</Address2><City>Greenbelt</City><State>MD</State>" & _
    "<Zip5></Zip5><Zip4></Zip4></Address></AddressValidateRequest>"

'Set myDom = CreateObject("MSXML2.DOMDocument")
Set myDom = New MSXML2.DOMDocument
myDom.async = False
myDom.Load (myXML)

Set xmlSelection = myDom.selectNodes(cstrXPath)
'Debug.Print "xmlSelection.Length: " & xmlSelection.length
'i = 1
For Each xmlElement In xmlSelection
    MsgBox xmlElement.getAttribute("Address1") & xmlElement.getAttribute("Zip5")
 '   i = i + 1
Next xmlElement

    MsgBox myDom.XML
End Sub

這可能並不復雜,但似乎可以完成工作:

Option Compare Database
Option Explicit

Sub xmlParseTest()
    Dim myDom As New MSXML2.DOMDocument
    myDom.SetProperty "SelectionLanguage", "XPath"
    ' test data
    myDom.LoadXML _
            "<?xml version=""1.0""?>" & _
            "<AddressValidateResponse>" & _
                "<Address>" & _
                    "<Address2>6406 IVY LN</Address2>" & _
                    "<City>GREENBELT</City>" & _
                    "<State>MD</State>" & _
                    "<Zip5>20770</Zip5>" & _
                    "<Zip4>1441??</Zip4>" & _
                "</Address>" & _
            "</AddressValidateResponse>" & _
            ""
    Dim addr As MSXML2.IXMLDOMElement
    For Each addr In myDom.SelectNodes("//Address")
        Debug.Print "Start of Address"
        Dim item As MSXML2.IXMLDOMElement
        For Each item In addr.ChildNodes
            Debug.Print "    " & item.BaseName & ": " & item.Text
        Next
        Set item = Nothing
        Debug.Print "End of Address"
    Next
    Set addr = Nothing
    Set myDom = Nothing
End Sub

在“ VBA立即”窗口中產生以下輸出:

Start of Address
    Address2: 6406 IVY LN
    City: GREENBELT
    State: MD
    Zip5: 20770
    Zip4: 1441??
End of Address

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM