XML SOAP Parse VBA

问题描述 投票:0回答:1

我有一个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>

任何关于如何有效地解析所需节点的建议都将受到赞赏。

xml vba soap
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.