Я пытаюсь разобрать XML-документ, который я получаю с веб-сайта. по какой-то причине я не могу вычислить, что я не могу проанализировать значение внутри узла «RATE». Строка xml кажется O.K. , но в конце кода (прокомментировано) я получаю переменную Object или с переменной блока не установлена ошибка. Буду благодарен за любую помощь.Разбор строки xml в VBA
XML STRING:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<CURRENCIES>
<LAST_UPDATE>2016-01-25</LAST_UPDATE>
<CURRENCY>
<NAME>Dollar</NAME>
<UNIT>1</UNIT>
<CURRENCYCODE>USD</CURRENCYCODE>
<COUNTRY>USA</COUNTRY>
<RATE>3.982</RATE>
<CHANGE>0.277</CHANGE>
</CURRENCY>
</CURRENCIES>
VBA КОД:
Private Sub loadXMLString(xmlString)
Dim strXML As String
Dim xNode As IXMLDOMNode
Dim XDoc As MSXML2.DOMDocument
strXML = xmlString
Set XDoc = New MSXML2.DOMDocument
If Not XDoc.LoadXML(strXML) Then 'strXML is the string with XML'
Err.Raise XDoc.parseError.ErrorCode, , XDoc.parseError.reason
End If
Set xNode = XDoc.FirstChild
Debug.Print xNode.SelectSingleNode("RATE").Text ' here i get the Object variable or With block variable not set error
Debug.Print xNode.ChildNodes(2).SelectSingleNode("RATE").Text ' also with that try i get the Object variable or With block variable not set error
End Sub
UPDATE: я нашел проблему (как я записал в комментариях к @ Натан). проблема является <?xml version="1.0" encoding="utf-8" standalone="yes"?>
узел
Испытано ему этот код работает: так, как я могу это сделать с, чтобы удалить этот узел в качестве подстроки, должно быть так, как я думаю, но я не имею большой опыт работы с XML
Private Sub loadXMLString(xmlString)
Dim strXML As String
Dim xNode As IXMLDOMNode
Dim XDoc As MSXML2.DOMDocument
strXML = "<CURRENCIES>" & _
"<LAST_UPDATE>2016-01-25</LAST_UPDATE>" & _
"<CURRENCY>" & _
"<NAME>Dollar</NAME>" & _
"<UNIT>1</UNIT>" & _
"<CURRENCYCODE>USD</CURRENCYCODE>" & _
"<COUNTRY>USA</COUNTRY>" & _
"<RATE>3.982</RATE>" & _
"<CHANGE>0.277</CHANGE>" & _
"</CURRENCY>" & _
"</CURRENCIES>"
Set XDoc = New MSXML2.DOMDocument
If Not XDoc.LoadXML(strXML) Then 'strXML is the string with XML'
Err.Raise XDoc.parseError.ErrorCode, , XDoc.parseError.reason
End If
Set xNode = XDoc.FirstChild
Debug.Print strXML
Debug.Print xNode.ChildNodes(1).SelectSingleNode("RATE").Text ' also with that try i get the Object variable or With block variable not set error
End Sub
Что такое xNode или .SelectSingleNode? не уверен, если вам нужно попасть в валюту 1-го? –
OK Я нашел проблему, я думаю ... похоже, что класс XDoc.LoadXML не может получить xml с заголовком: Xml version = "1.0" encoding = "utf-8" standalone = "yes"?> If Я «очищаю», что «заголовок» работает с xNode.ChildNodes (1) .SelectSingleNode («RATE»). Текстовое свойство. – jonathana
должен быть способ сделать это с заголовком xml без необходимости удаления этой подстроки, но как? – jonathana