Я работаю над проектом по импорту данных запроса в Excel с помощью вызова SOAP. Я могу вернуть XML без проблем, и это выглядит так.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<RetrieveRequestsResponse xmlns="http://rapid2.library.colostate.edu/rapid5api/">
<RetrieveRequestsResult>
<IsSuccessful>true</IsSuccessful>
<Transactions>
<Transaction>
<RapidRequestId>1111</RapidRequestId>
<XRefRequestId>[TN:11111]</XRefRequestId>
<StateType>Pending</StateType>
<RapidRequestType>Article</RapidRequestType>
<BorrowerRapidCode>###</BorrowerRapidCode>
<BorrowerCountryCode>AU</BorrowerCountryCode>
</Transaction>
</Transactions>
</RetrieveRequestsResult>
</RetrieveRequestsResponse>
</soap:Body>
</soap:Envelope>
моя проблема возникает, когда я пытаюсь проанализировать и отобразить XML в Excel.
Использование этого превосходного учебника Я создал следующий код
Dim Resp As New DOMDocument60
Resp.LoadXML xmlhtp.responseText
Dim transaction As IXMLDOMNode
Dim XmlNamespaces As String
Dim i As Integer
XmlNamespaces = "xmlns:doc2='http://rapid2.library.colostate.edu/rapid5api/'
Resp.setProperty "SelectionNamespaces", XmlNamespaces
For Each transaction In Resp.getElementsByTagName("Transaction")
Debug.Print "tesst"
i = i + 1
WS.Range("A2:A200").Cells(1, i).Value = transaction.SelectNodes("//doc2:RapidRequestId")(0).Text
Next Transaction
End With
End Sub
однако это возвращает «ничто» для транзакции в Locals и пропускает цикл, когда я отлаживаю.
После дальнейших исследований Я наткнулся на этот пост , который, кажется, касается моей проблемы необъявленного пространства имен?
<RetrieveRequestsResponse xmlns="http://rapid2.library.colostate.edu/rapid5api/">
После некоторой бесцельной настройки моего кода я получил:
Dim Resp As New DOMDocument60
Resp.LoadXML xmlhtp.responseText
Dim Transaction As IXMLDOMNode
Dim XmlNamespaces As String
Dim i As Integer
XmlNamespaces = "xmlns:doc2='http://rapid2.library.colostate.edu/rapid5api/'"
Resp.setProperty "SelectionNamespaces", XmlNamespaces
For Each transaction In Resp.getElementsByTagName("Transaction")
Debug.Print "tesst"
i = i + 1
WS.Range("A2:A200").Cells(1, i).Value = Transaction.SelectNodes("//doc2:RapidRequestId")(0).Text
Next Transaction
End With
End Sub
Теперь это возвращает две строки RequestID, однако они оба одинаковы. В идеале мне нужно иметь возможность отображать данные со всех узлов в
<Transaction>
Большое спасибо
Sam