2015-10-19 3 views
0

У меня возникла проблема с анализом XML-файла, полученного из API в Excel. Я могу успешно получить набор данных (ниже), но решения, которые я нашел для форматирования каждого поля в свою собственную ячейку в формат таблицы, не сработали, я думаю, из-за способа форматирования XML.Parser для сложного файла XML

Каждый XML будет выглядеть примерно так, как показано ниже. Может быть несколько идентификаторов сообщений, которые необходимо извлечь независимо. (.. Это был еще один вопрос, который я имел пространство в «Message ID» кидал все виды ошибок)

Вот решение, которое я пытался работать с: How to parse XML using vba

<?xml version="1.0" encoding="utf-8"?> 
<methodResponse><item><methodName><![CDATA[legacy.message_stats]]> </methodName><responseData><message_data> 
<message id="9999"> 
    <message_subject><![CDATA[50% rabatt på alla kort! Skicka ett personligt julkort i år!]]></message_subject> 
    <date_sent>2015-09-13 19:15:48</date_sent> 
    <message_notes><![CDATA[50% Off Holiday Cards, SE]]></message_notes> 
    <withheld_total>   0</withheld_total> 
    <globally_suppressed>   0</globally_suppressed> 
    <suppressed_total>   0</suppressed_total> 
    <bill_codes><![CDATA[emc_0914_HOLIDAYCARDS_SE]]></bill_codes> 
    <sent_total>  15195</sent_total> 
    <sent_total_html>  15195</sent_total_html> 
    <sent_total_plain>   0</sent_total_plain> 
    <sent_rate_total>100.00</sent_rate_total> 
    <sent_rate_html>100.00</sent_rate_html> 
    <sent_rate_plain>0.00</sent_rate_plain> 
    <delivered_total>  15060</delivered_total> 
    <delivered_html>  15060</delivered_html> 
    <delivered_plain>   0</delivered_plain> 
    <delivered_rate_total>99.11</delivered_rate_total> 
    <delivered_rate_html>99.11</delivered_rate_html> 
    <delivered_rate_plain>0.00</delivered_rate_plain> 
    <bounced_total>  135</bounced_total> 
    <bounced_html>  135</bounced_html> 
    <bounced_plain>   0</bounced_plain> 
    <bounced_rate_total>0.89</bounced_rate_total> 
    <bounced_rate_html>0.89</bounced_rate_html> 
    <bounced_rate_plain>0.00</bounced_rate_plain> 
    <invalid_total>  42</invalid_total> 
    <invalid_rate_total>0.28</invalid_rate_total> 
    <has_dynamic_content>0</has_dynamic_content> 
    <has_delivery_report>0</has_delivery_report> 
    <link_append_statement/> 
    <timezone/> 
    <message_name><![CDATA[0914_HOLIDAYCARDS_SE]]></message_name> 
    <binding>franklin</binding> 
    <ftf_forwarded>0</ftf_forwarded> 
    <ftf_signups>0</ftf_signups> 
    <ftf_conversion_rate>0.00</ftf_conversion_rate> 
    <optout_total>   6</optout_total> 
    <optout_rate_total>0.04</optout_rate_total> 
    <clicked_total>  90</clicked_total> 
    <clicked_unique>  81</clicked_unique> 
    <clicked_rate_unique>4.82</clicked_rate_unique> 
    <clicked_rate_aps>1.11</clicked_rate_aps> 
    <opened_total>  2166</opened_total> 
    <opened_unique>  1681</opened_unique> 
    <opened_rate_unique>11.16</opened_rate_unique> 
    <opened_rate_aps>1.29</opened_rate_aps> 
    <campaign_name>2015_09_September_Emails</campaign_name> 
    <campaign_id>260147</campaign_id> 
    <campaign_type>C</campaign_type> 
    <included_groups> 
     <segment id="1182637"><![CDATA[i18n_TM_sendlist]]></segment> 
    </included_groups> 
    <included_smartlists> 
     <segment id="1430586"><![CDATA[[i18n] SE/Swedish (sv-SE)]]></segment> 
    </included_smartlists> 
    <excluded_groups> 
    </excluded_groups> 
    <excluded_smartlists> 
     <segment id="1532985"><![CDATA[Exclusion Segment -- Excluding Yahoo subscribers outside of 90 day engagement window]]></segment> 
     <segment id="1428935"><![CDATA[New Customer Holdout]]></segment> 
     <segment id="1419789"><![CDATA[OptOuts]]></segment> 
     <segment id="1434420"><![CDATA[Reintegration: AOL]]></segment> 
     <segment id="1436595"><![CDATA[Reintegration: Cloudmark]]></segment> 
    </excluded_smartlists> 
    <attributes> 
     <attribute name="Discount" id="1942"><![CDATA[Item-Level]]></attribute> 
    </attributes> 
    <link id="43864062"> 
      <url><![CDATA[http://www.zazzle.se/about/contactus?pm=EARLYSPECIAL&CMPN=emc_0914_HOLIDAYCARDS_SE_fContactUs&rf=238625503972086358]]></url> 
      <url_name><![CDATA[Kontakta Oss]]></url_name> 
      <url_display><![CDATA[Kontakta Oss]]></url_display> 
      <has_name>1</has_name> 
      <clicked_unique_total>0</clicked_unique_total> 
      <clicked_total_plain>0</clicked_total_plain> 
      <clicked_unique_plain>0</clicked_unique_plain> 
      <clicked_total_html>0</clicked_total_html> 
      <clicked_unique_html>0</clicked_unique_html> 
      <roi_conversions>0</roi_conversions> 
      <roi_total>0.00</roi_total> 
      <roi_average>0.00</roi_average> 
    </link> 

Вот VBA я использую, чтобы попытаться вытащить поле:

Sub GetXML() 

''Pull Raw XML 
Dim mainWorkBook As Workbook 
Set mainWorkBook = ActiveWorkbook 

Dim xmlInput As String 
xmlInput = mainWorkBook.Worksheets("XML").Range("A1").Value 

Dim oXmlHttp As MSXML2.XMLHTTP60 
Set oXmlHttp = New MSXML2.XMLHTTP60 

oXmlHttp.Open "POST", "api.url", False, "UserName", "Password" 
oXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
oXmlHttp.setRequestHeader "Connection", "Keep-Alive" 
oXmlHttp.setRequestHeader "Accept-Language", "en" 

oXmlHttp.send xmlInput 

mainWorkBook.Worksheets("Output").Range("A1").Value = oXmlHttp.responseText 


''Parse Fields 
Dim objXML As MSXML2.DOMDocument 

Set objXML = New MSXML2.DOMDocument 

If Not objXML.LoadXML(oXmlHttp.responseText) Then 
    Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason 
End If 

Dim point As IXMLDOMNode 
Set point = objXML.FirstChild 

Debug.Print point.SelectSingleNode("message_subject").Text 


End Sub 
+0

Трудно проверить ваш код без полного примера ответа на работу. –

+0

Я не совсем уверен, каков ваш реальный вопрос. –

+0

Я добавил более полную, но все еще сокращенную версию ответа XML с сервера. Я не могу добавить целую строку, потому что она превышает 30 тыс. Символов. – Fubudis

ответ

1
<message id="999999"> 

Здесь имя тега элемента является „сообщение“ и имеет атрибут под названием «я d "со значением 999999. Там должно быть место там, и оно не должно вызывать ошибок разбора

Смежные вопросы