我有一个XML API响应,我试图在VBA中解析。我正在尝试使用
objXML.selectNodes("//soap:Envelope/soap:Body/ConsignmentTrackingGetFullDetailsV3Response/ConsignmentTrackingGetFullDetailsV3Result/FullConsignmentDetails/ConsignmentStatuses")
但这似乎没有找到任何节点。
我也看了objXML.getElementsByTagName
,但这不起作用
我可以通过使用多个子节点来访问这些节点,但这似乎并不高效。 我是SOAP的新手,但尝试添加名称空间。
XML响应如下。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ConsignmentTrackingGetFullDetailsV3Response xmlns="http://webapp-cl.internet-delivery.com/ThirdPartyIntegrationService">
<ConsignmentTrackingGetFullDetailsV3Result>
<ResultState>Successful</ResultState>
<FullConsignmentDetails>
<ConsignmentNumber>31487490001622</ConsignmentNumber>
<ConsignmentStatuses>
<GetConsignmentDetailsStatus>
<StatusCode>2</StatusCode>
<StatusDescription>Collected</StatusDescription>
</GetConsignmentDetailsStatus>
<GetConsignmentDetailsStatus>
<StatusCode>4</StatusCode>
<StatusDescription>Out For Delivery</StatusDescription>
</GetConsignmentDetailsStatus>
</ConsignmentStatuses>
</FullConsignmentDetails>
</ConsignmentTrackingGetFullDetailsV3Result>
</ConsignmentTrackingGetFullDetailsV3Response>
</soap:Body>
</soap:Envelope>
有关如何有效解析所需节点的任何建议都将受到赞赏。
答案 0 :(得分:0)
试试这个。它应该工作。我刚刚在当地测试过。
Sub TestXML2()
Dim http As New XMLHTTP60
Dim xmldoc As Object, post As Object
With http
.Open "GET", "place_url_here", False
.send
Set xmldoc = CreateObject("MSXML2.DOMDocument")
xmldoc.LoadXML .responseXML.XML
End With
For Each post In xmldoc.SelectNodes("//FullConsignmentDetails")
r = r + 1: Cells(r, 1) = post.SelectNodes(".//ConsignmentNumber")(0).Text
Cells(r, 2) = post.SelectNodes(".//StatusCode")(0).Text
Cells(r, 3) = post.SelectNodes(".//StatusDescription")(0).Text
Next post
Set xmldoc = Nothing
End Sub
参考添加到库:
Microsoft XML, v6.0