MS Access VB XML 解析问题
MS Access VB XML Parsing issue
我正在尝试在 MS Access 中创建一个表单,允许用户将地址发送到 USPS 进行验证并获得正确的地址。我大部分都在工作,但我是 XML 的新手,我正在使用在其他地方找到的代码并试图让它工作。我已经能够发送数据并收到 XML 的响应。但是我不知道如何解析节点。示例 我将有一个表单,其中有人输入地址 1、2、城市、州、邮政编码等...我希望结果返回到这些表单字段中,或者至少返回到字段旁边的文本框中。我能够作为测试显示我从 USPS 取回的结果,但它显然包含 XML 代码。所以现在我只需要解析 XML 中的数据并显示它。但是我不能只得到我正在寻找的数据。例如,假设我想要代码中的地址 1、城市、zip5。就发送数据和接收固定地址而言,这是我所拥有的。但同样,我似乎无法获取数据。
我怀疑根据之前的错误设置 cstrXpath 不正确。现在下面的这段代码确实显示了带有完整结果的消息框,包括代码 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 立即生成以下输出 window:
Start of Address
Address2: 6406 IVY LN
City: GREENBELT
State: MD
Zip5: 20770
Zip4: 1441??
End of Address
我正在尝试在 MS Access 中创建一个表单,允许用户将地址发送到 USPS 进行验证并获得正确的地址。我大部分都在工作,但我是 XML 的新手,我正在使用在其他地方找到的代码并试图让它工作。我已经能够发送数据并收到 XML 的响应。但是我不知道如何解析节点。示例 我将有一个表单,其中有人输入地址 1、2、城市、州、邮政编码等...我希望结果返回到这些表单字段中,或者至少返回到字段旁边的文本框中。我能够作为测试显示我从 USPS 取回的结果,但它显然包含 XML 代码。所以现在我只需要解析 XML 中的数据并显示它。但是我不能只得到我正在寻找的数据。例如,假设我想要代码中的地址 1、城市、zip5。就发送数据和接收固定地址而言,这是我所拥有的。但同样,我似乎无法获取数据。
我怀疑根据之前的错误设置 cstrXpath 不正确。现在下面的这段代码确实显示了带有完整结果的消息框,包括代码 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 立即生成以下输出 window:
Start of Address
Address2: 6406 IVY LN
City: GREENBELT
State: MD
Zip5: 20770
Zip4: 1441??
End of Address