2010-09-09 1 views
0

Я использую MSXML2 для загрузки XML-файла (фида из Google Analytics).Получение информации из документа XML в VBA

Теперь мне нужно получить данные, но я не могу понять, как это сделать.

Это XML:

<?xml version='1.0' encoding='utf-8'?> 
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:dxp='http://schemas.google.com/analytics/2009' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"dsdsdsdsdsdsdsd."' gd:kind='analytics#data'> 
    <id>http://www.google.com/analytics/feeds/data?ids=ga:2000000&amp;dimensions=ga:campaign&amp;metrics=ga:visits&amp;filters=ga:campaign%3D%3Dcrosspromo&amp;start-date=2010-08-26&amp;end-date=2010-09-09</id> 
    <updated>2010-09-09T05:50:40.705-07:00</updated> 
    <title>Google Analytics Data for Profile 2000000</title> 
    <link rel='self' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?max-results=50&amp;end-date=2010-09-09&amp;start-date=2010-08-26&amp;metrics=ga%3Avisits&amp;ids=ga%3A2000000&amp;dimensions=ga%3Acampaign&amp;filters=ga%3Acampaign%3D%3Dcrosspromo' /> 
    <author> 
    <name>Google Analytics</name> 
    </author> 
    <generator version='1.0'>Google Analytics</generator> 
    <openSearch:totalResults>1&lt; 
    /openSearch:totalResults&gt; 
    <openSearch:startIndex>1</openSearch:startIndex> 
    <openSearch:itemsPerPage>50</openSearch:itemsPerPage> 
    <dxp:aggregates> 
    <dxp:metric confidenceInterval='0.0' name='ga:visits' type='integer' value='5070' /> 
    </dxp:aggregates> 
    <dxp:dataSource> 
    <dxp:property name='ga:profileId' value='2000000' /> 
    <dxp:property name='ga:webPropertyId' value='UA-2000000-1' /> 
    <dxp:property name='ga:accountName' value='test' /> 
    <dxp:tableId>ga:2000000</dxp:tableId> 
    <dxp:tableName>test</dxp:tableName> 
    </dxp:dataSource> 
    <dxp:endDate>2010-09-09</dxp:endDate> 
    <dxp:startDate>2010-08-26</dxp:startDate> 
    <entry gd:etag='W/"CkMEQX47eSp7I2A9Wx5QGUQ."' gd:kind='analytics#datarow'> 
    <id>http://www.google.com/analytics/feeds/data?ids=ga:2000000&amp;ga:campaign=crosspromo&amp;filters=ga:campaign%3D%3Dcrosspromo&amp;start-date=2010-08-26&amp;end-date=2010-09-09</id> 
    <updated>2010-09-08T17:00:00.001-07:00</updated> 
    <title>ga:campaign=crosspromo</title> 
    <link rel='alternate' type='text/html' href='http://www.google.com/analytics' /> 
    <dxp:dimension name='ga:campaign' value='crosspromo' /> 
    <dxp:metric confidenceInterval='0.0' name='ga:visits' type='integer' value='5070' /> 
    </entry></openSearch:totalResults> 
</feed> 

Затем я загружаю XML и поиска для "входа" метки:

Dim objXML As MSXML2.DOMDocument 
Set objXML = New MSXML2.DOMDocument 
objXML.loadXML strXML 
Debug.Print objXML.getElementsByTagName("entry").Item(0).Text 

Но это выходы:

http://www.google.com/analytics/feeds/data?ids=ga:20000000&ga:campaign=crosspromo&filters=ga:campaign%3D%3Dcrosspromo&start-date=2010-08-26&end-date=2010-09-092010-09-08T17:00:00.001-07:00ga:campaign=crosspromo 

Где остальная часть данных? Если я пытаюсь пункт (1) он не ...

ответ

4

Ну Пункт (1) не потому, что есть только один элемент «запись», и это в 0.

Свойство .Text возвращает весь текст содержание элемента и всех его детей. Если вы посмотрите внимательно, это то, что у вас есть.

Если вам нужно что-то еще, вам придется использовать соответствующий метод у предмета (0).

Задать вопрос (How to parse XML in VBA).

0

Вы получили всю информацию, которую вы просили. Вы получили текст каждого элемента в <entry></entry>

позволяет разбить его (это был ваш выход):

Первый набор текста:

http://www.google.com/analytics/feeds/data?ids=ga:20000000&ga:campaign=crosspromo&filters=ga:campaign%3D%3Dcrosspromo&start-date=2010-08-26&end-date=2010-09-09 

Второй набор текста:

2010-09-08T17:00:00.001-07:00 

Третий комплект текста:

ga:campaign=crosspromo 

В записи с выходом не было ничего. Поэтому вы ничего не видите.

4

Try:

Option Explicit 

Public Function LoadXmlDoc() As DOMDocument 
    Dim aDoc As DOMDocument 
    Set aDoc = New DOMDocument 
    aDoc.async = False 
    aDoc.Load ("feedfile.xml") 
    Set LoadXmlDoc = aDoc 
End Function 

'' Direct access 
Public Sub getEntry() 
    Dim aDoc As DOMDocument 
    Dim aNode As IXMLDOMNode 
    Set aDoc = LoadXmlDoc 
    Set aNode = aDoc.SelectSingleNode("//entry") 
    Debug.Print aNode.XML 
End Sub 

'' search for it 
Public Sub findEntry() 
    Dim aDoc As DOMDocument 
    Dim aNode As IXMLDOMNode 
    Dim aNodes As IXMLDOMNodeList 
    Set aDoc = LoadXmlDoc 
    Set aNodes = aDoc.getElementsByTagName("entry") 
    For Each aNode In aNodes 
     Debug.Print aNode.XML 
    Next 
End Sub 

'' get the entry date 
Public Sub getDate() 
    Dim aDoc As DOMDocument 
    Dim aNode As IXMLDOMNode 
    Set aDoc = LoadXmlDoc 
    Set aNode = aDoc.SelectSingleNode("//entry/updated") 
    Debug.Print aNode.Text 
End Sub