python从xml中提取数据并保存到excel

标签 python xml python-2.7 arcpy

我想从 XML 文件中提取一些数据并将其保存为表格格式,例如 XLS 或 DBF。

这是我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header />
  <SOAP-ENV:Body>
    <ADD_LandIndex_001>
      <CNTROLAREA>
        <BSR>
          <VERB>ADD</VERB>
          <NOUN>LandIndex</NOUN>
          <REVISION>001</REVISION>
        </BSR>
      </CNTROLAREA>
      <DATAAREA>
        <LandIndex>
          <reportId>AMI100031</reportId>
          <requestKey>R3278458</requestKey>
          <SubmittedBy>EN4871</SubmittedBy>
          <submittedOn>2015/01/06 4:20:11 PM</submittedOn>
          <LandIndex>
            <agreementdetail>
              <agreementid>001       4860</agreementid>
              <agreementtype>NATURAL GAS</agreementtype>
              <currentstatus>
                <status>ACTIVE</status>
                <statuseffectivedate>1965/02/18</statuseffectivedate>
                <termdate>1965/02/18</termdate>
              </currentstatus>
              <designatedrepresentative>
              </designatedrepresentative>
            </agreementdetail>
          </LandIndex>
        </LandIndex>
      </DATAAREA>
    </ADD_LandIndex_001>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我对 DATAAREA/LandIndex/LandIndex/下的 agreementdetail 标签内的信息感兴趣

更新:

多亏了 MattDMo,这个任务已经从它的死点移动了一点。所以我在下面制作了这个脚本。它迭代文件并获取 agreementdetail 的所有实例,并为每个实例输出 agreementidagreementtype

import xml.etree.ElementTree as ET
import arcpy

xmlfile = 'D:/Working/Test/Test.xml'
element_tree = ET.parse(xmlfile)
root = element_tree.getroot()
agreement = root.findall(".//agreementdetail")
result = []
elements = ('agreementid', 'agreementtype')

for a in agreement:
    obj = {}
    for e in elements:
        obj[e] = a.find(e).text
    result.append(obj)

arcpy.AddMessage(result)

我收到的输出由一堆这样的字符串组成:{'agreementid': '001 4860', 'agreementtype': 'NATURAL GAS'}

现在我需要将此输出转换为表格格式(.csv、.dbf、.xls 等),以便 agreementid 和 agreementtype 成为列:

agreementid    | agreementtype 
001       4860 | NATURAL GAS

如果您能指导我如何完成它,我将不胜感激。或者有什么例子吗?

附言Python版本为2.7

最佳答案

以下应该有效:

import xml.etree.ElementTree as ET
import arcpy

xmlfile = 'D:/Working/Test/Test.xml'
element_tree = ET.parse(xmlfile)
root = element_tree.getroot()
agreement = root.find(".//agreementid").text
arcpy.AddMessage(agreement)

root.find() 调用使用 XPath表达式(快速备忘单位于 Python 文档 here 中)以在名为 agreementid 的当前级别下的任何级别找到第一个标签。如果您的文件中有多个以该名称命名的标签,您可以使用 root.findall() 并遍历结果。例如,如果有三个名为 agreementid 的字段,并且您知道您想要第二个,那么 root.findall(".//agreementid")[1]应该可以。

关于python从xml中提取数据并保存到excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27846942/

相关文章:

python - 在 Alpine Linux 上安装 Pillow 时没有这样的文件或目录 "limits.h"

Python提示用户有回声和密码没有回声

java - onClick 方法不存在

php - 如何使用 xml 标签一次使用 'file_get_contents' 保存多个图像

python-2.7 - 在使用 joblib 加载模型之前检查 sklearn 版本

python - 将 30 分钟添加到从文本文件读取的时间并与当前时间进行比较

python - 如何在 Tensorflow 中绘制张量并将其保存为图像

python - Django auth 中间件的一些内部结构

python - 在 python 3 中打印到一个空文件

java - XML/安卓 : No resource found that matches the given name error