【问题标题】:Parsing XML with namespaces into a dataframe将带有命名空间的 XML 解析为数据框
【发布时间】:2015-08-04 12:39:20
【问题描述】:

我有以下简化的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
    <soap:Body>
        <ReadResponse xmlns="ABCDEFG.com">
            <ReadResult>
                <Value>
                    <Alias>x1</Alias>
                    <Timestamp>2013-11-11T00:00:00</Timestamp>
                    <Val>113</Val>
                    <Duration>5000</Duration>
                    <Quality>128</Quality>
                </Value>
                <Value>
                    <Alias>x1</Alias>
                    <Timestamp>2014-11-11T00:02:00</Timestamp>
                    <Val>110</Val>
                    <Duration>5000</Duration>
                    <Quality>128</Quality>
                </Value>
                <Value>
                    <Alias>x2</Alias>
                    <Timestamp>2013-11-11T00:00:00</Timestamp>
                    <Val>101</Val>
                    <Duration>5000</Duration>
                    <Quality>128</Quality>
                </Value>
                <Value>
                    <Alias>x2</Alias>
                    <Timestamp>2014-11-11T00:02:00</Timestamp>
                    <Val>122</Val>
                    <Duration>5000</Duration>
                    <Quality>128</Quality>
                </Value>
            </ReadResult>
        </ReadResponse>
    </soap:Body>
</soap:Envelope>

并希望将其解析为具有以下结构的数据帧(保留一些标签并丢弃其余标签):

Timestamp                x1    x2
2013-11-11T00:00:00      113  101
2014-11-11T00:02:00      110  122

问题是由于 XML 文件包含命名空间,我不知道如何继续。我已经阅读了几个教程(例如,https://docs.python.org/2/library/pyexpat.html)和问题(例如,如何打开 this XML file to create dataframe in Python?Parsing XML with namespace in Python via 'ElementTree'),但它们都没有帮助/工作。如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: python xml pandas elementtree


    【解决方案1】:

    这是一个关于如何使用 lxml 和 xpaths 解析 xml 的示例:

    from lxml import etree
    namespaces = {'abc': "ABCDEFG.com"}
    xmltree = etree.fromstring(xml_string)
    items = xmltree.xpath('//abc:Alias/text()', namespaces=namespaces)
    
    print items
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 2010-11-08
      • 2018-12-07
      • 2012-06-09
      相关资源
      最近更新 更多