当前位置: 首页 > 知识库问答 >
问题:

复杂XML文件的解析器

田冥夜
2023-03-14

我在解析从Excel中的API检索的XML文件时遇到问题。我可以成功地检索数据集(如下所示),但我找到的将每个字段格式化为其自身单元格的表格式的解决方案没有奏效,我认为这是因为XML的格式化方式。

每个XML看起来都类似于下面的内容。可能需要独立提取多个消息ID。(这是我遇到的另一个问题。“消息ID”中的空格引发了各种错误。)

下面是我尝试使用的解决方案:如何使用vba解析XML

<?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

共有1个答案

裴畅
2023-03-14
 <message id="999999">

这里的元素标签名称是“消息”,并且有一个名为“id”的属性,值为999999。那里应该有一个空格,不会导致任何解析错误

 类似资料:
  • 我真的希望你能在这件事上帮我....我需要从我的xml文件中获取特定的数据,但我卡在了一个点上,我不知道如何继续... 我想从网络获得:网络名称;From代码:mcc和mnc代码;From设置:名称、id、类型、参数名称、值; 这就是我的xml文件的结构: 这就是我目前掌握的......我真的不能再继续下去了...在字符串content=CNode.GetLastChild().GetTextCo

  • 我收到了一个包含字符串和元组元素组合的CSV文件,但找不到正确解析它的方法。我错过了什么明显的东西吗? csvfile 第一行是标题,第二行开始数据 产量: csv.reader解析每行不同,因为结构复杂,嵌入了花括号元素。 ...但是我希望每行有20个元素。

  • 问题内容: 我正在寻找一种将复杂文本文件解析为pandas DataFrame的简单方法。下面是一个示例文件,我希望解析后的结果是什么样,以及我当前的方法。 有什么方法可以使其更简洁/更快/更pythonic /更易读? 我也把这个问题放在了Code Review上 。 我最终写了一篇博客文章向初学者解释。 这是一个示例文件: 这是我希望解析后的结果看起来像什么: 这是我目前解析的方式: 问题答案

  • 是否有开源库可以使用java解析junit xml,并获得执行的testsuite名称、testsuite对应的TestCase、失败次数和成功次数等信息?我刚刚看到了junit风格的报表工具,有没有开源库可以在Java中获取这些信息。

  • 我尝试了不同的方法在Android中解析JSON文件,但在打印出来时出现了错误。 这是我的整个JSON文件: 以下是我为使其正常工作而实现的代码: 这是onPostExecute方法: 我已经从这个网站的帮助来布局我的功能:https://www.androidhive.info/2012/01/android-json-parsing-tutorial/

  • 问题内容: 我如何在Java或C中使用vtd-xml解析如下的xml文件? 任何帮助,将不胜感激。 谢谢 问题答案: 我想其中有些取决于您要如何解析文件。 这是一个“非生产”示例,其中使用了一些有用的技术,包括: XPath选择(此处仅使用“ / *”) 浏览所有同级节点 通过子节点向下看 使用AutoPilot将节点属性提取到地图中 希望能帮助到你 产生以下输出: 添加带有AutoPilot循环