使用Python ElementTree解析XML

Jerodestapa

我有一个长的XML文档,其结构如下:

<carrierData>
    <inspections>
        <inspection inspection_date="2013-01-16" report_state="TX" report_number="TX130G0ELJ05" level="1" time_weight="1">
           <drivers>
              <driver driver_type="Primary Driver" first_name="JOHN" last_name="SMITH" date_of_birth="1962-11-20" license_state="TX" License_number="12345678"/>
              <driver driver_type="CoDriver"/>
           </drivers>
           <vehicles>
               <vehicle unit="1" vehicle_id_number="2HSCAAXN02C039269" unit_type="Truck Tractor" license_state="TX" license_number="1B13577"/>
               <vehicle unit="2" vehicle_id_number="1GRAA76228S702393" unit_type="Semi-Trailer" license_state="TX" license_number="X99757"/>
           </vehicles>
           <violations>
               <violation code="393.11" description="No/defective lighting devices/reflective devices/projected" oos="N" time_severity_weight="3" BASIC="Vehicle Maint."/>
               <violation code="393.53(b)" description="Automatic brake adjuster CMV manufactured on or after 10/20/1994 - air brake" oos="N" time_severity_weight="4" BASIC="Vehicle Maint."/>
               <violation code="393.47(e)" description="Clamp/Roto-Chamber type brake(s) out of adjustment" oos="N" time_severity_weight="4" BASIC="Vehicle Maint."/>
               <violation code="396.3(a)(1)" description="Inspection/repair and maintenance parts and accessories" oos="N" time_severity_weight="2" BASIC="Vehicle Maint."/>
           </violations>
    </inspection>

我需要遍历检查报告编号列表,并打印与列表中每个编号关联的每个驱动程序的名字和姓氏。我正在使用Python的ElementTree解析XML,尽管下面的代码没有收到错误,但它也没有给我任何结果:

import xml.etree.ElementTree as ET

codes = ['TX3YZ8HQE1X1', 'TX3YAEHQE15W', 'KS00YQ008857', 'TX43D99DAN33', 'NM3267100378',
         'COPF31000853', 'TX3ZYF0MUQ6F', 'TX3ZFC0MHXLU', 'TX3Z760MGU0H', 'TX3YGG0MUQ1R',
         'TX3YBD0MUI0A', 'TX3XPF0MKQYG', 'TX3X8F0MHXA7', 'AZ0160001581', 'TX3WC40ADYGZ',
         'ID6300005350', 'TX3VV50ADUOI', 'TX137S0ELO02', 'UTCE03208119', 'UTCE03208119',
         'TX3UTG0MJKDL', 'TX3UD60MIJU5', 'TX13690EBI05', 'TX3U4E0AFA94', 'TX3U4E0AFA94',
         'TX3T5F0MIJMH', 'TX13550BKL02', 'TX3SLE0MIJGZ', 'TX3SLE0MIJGZ', 'TX3S8D0AFH3D',
         'UTCE03207947', 'TX133Q0ENG01', 'TX133Q0ENG01', 'TX133Q0ENG01', 'TX3REM0MHEK3',
         'ID0000169042', 'COPF05000200', 'TX13280EPV0B', 'TX131S9DAB02', 'CO1E19000017',
         'TX3PD60WAA4L', 'TX1317W1NW07', 'CO2D02000044', 'LALAEQ001266', 'TX130H0EBT06',
         'TX3NW10ABLMK', 'NV7233010192', 'NV4045000998', 'CO3301000406', 'CO5C01000218',
         'TX12949DBU03', 'FL1619000314', 'TX12929DIE02', 'TX128X0AAP01', 'TX128A9DHA07',
         'CO2B01000061', 'TX1274W1DV01', 'TX126Z9DCM01', 'TX127U9DBV01', 'TX127U9DBV01',
         'TX127R9DIZ02', 'TX127K9DCQ06', 'AZ0YDG000141', 'NV7196001031', 'TX126B0FJZ01',
         'TX126I9DAN01', 'LALACV003777', 'CO2B12000014', 'TX12650HTB01', 'ID0000220955']

tree = ET.parse("C:\All_BASICs_07-25-2014.xml")
root = tree.getroot()

for x in codes:
    for node in tree.iter('inspection'):
        if ['report_id'] == [x]:
            name = node.attrib.get('first_name','last_name')
            print name

我是编程新手,所以这里我可能会遗漏一些显而易见的东西,但是如果没有错误引用,我很难找到问题所在。

史蒂文·克莱斯卡拉(Steven Kryskalla)

您这条线是什么意思?

if ['report_id'] == [x]:

使用此代码,您正在测试['report_id'] == ['TX3YZ8HQE1X1']['report_id'] == ['TX3YAEHQE15W']等等,这将永远是不正确的。这就是为什么您的代码不打印任何内容或给出错误而退出的原因。

report_id您发布的XML中没有任何名称是什么意思report_number

如果你想抓住主要的驾驶员的名字对所有report_number的在codes列表中,尝试是这样的:

for x in codes:
    for node in tree.iter('inspection'):
        if node.attrib['report_number'] == x:
            primary_driver = [d for d in node.iter('driver') if d.attrib['driver_type'] == "Primary Driver"]
            primary_driver = primary_driver[0]
            first_name = primary_driver.attrib['first_name']
            last_name = primary_driver.attrib['last_name']
            print first_name, last_name

但是,此代码存在一个性能问题。您正在为中的每个代码遍历整个XML文档codes这种具有复杂性 O(number_of_codes * number_of_records)O(N**2)您可以分O(N)执行此操作,而无需循环遍历文档并使用一来确定是否应包含记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ElementTree解析XML

来自分类Dev

使用elementtree解析xml网站

来自分类Dev

使用elementtree解析xml站点

来自分类Dev

使用ElementTree的递归XML解析python

来自分类Dev

XML解析Python ElementTree-嵌套循环

来自分类Dev

Python - ElementTree XML API(未按预期解析)

来自分类Dev

使用ElementTree顺序解析某些XML标签

来自分类Dev

使用ElementTree在Python中解析XML-findall

来自分类Dev

使用python ElementTree解析XML:ParseError:标记不匹配

来自分类Dev

Python-使用ElementTree解析具有重复标签的XML

来自分类Dev

使用ElementTree在Python中解析XML-findall

来自分类Dev

如何使用 Python ElementTree 在 XML 解析期间检查条件

来自分类Dev

python(xml.etree.ElementTree)中的XML解析

来自分类Dev

使用ElementTree解析XML中的XML节点值

来自分类Dev

使用xml.etree.ElementTree XML解析子元素

来自分类Dev

使用ElementTree解析XML时使用名称空间

来自分类Dev

解析elementTree以XML格式返回字符串-Python

来自分类Dev

具有多个答案的Python ElementTree XML解析

来自分类Dev

将XML解析为Pandas Dataframe,Python 3.8,ElementTree

来自分类Dev

带有ElementTree Amazon API的python xml解析器

来自分类Dev

python elementTree XML解析器的性能问题

来自分类Dev

使用ElementTree和请求进行XML解析

来自分类Dev

如何使用ElementTree正确解析utf-8 xml?

来自分类Dev

无法使用xml.etree.ElementTree解析html

来自分类Dev

如何使用ElementTree解析XML文件并检索子元素

来自分类Dev

解析XML:使用ElementTree查找有趣的元素

来自分类Dev

使用ElementTree将XML属性解析为变量

来自分类Dev

使用xml.etree.ElementTree的Python xml解析不起作用

来自分类Dev

Python xml.ElementTree - 在变量中返回解析后的 xml 以供稍后使用的函数

Related 相关文章

  1. 1

    使用ElementTree解析XML

  2. 2

    使用elementtree解析xml网站

  3. 3

    使用elementtree解析xml站点

  4. 4

    使用ElementTree的递归XML解析python

  5. 5

    XML解析Python ElementTree-嵌套循环

  6. 6

    Python - ElementTree XML API(未按预期解析)

  7. 7

    使用ElementTree顺序解析某些XML标签

  8. 8

    使用ElementTree在Python中解析XML-findall

  9. 9

    使用python ElementTree解析XML:ParseError:标记不匹配

  10. 10

    Python-使用ElementTree解析具有重复标签的XML

  11. 11

    使用ElementTree在Python中解析XML-findall

  12. 12

    如何使用 Python ElementTree 在 XML 解析期间检查条件

  13. 13

    python(xml.etree.ElementTree)中的XML解析

  14. 14

    使用ElementTree解析XML中的XML节点值

  15. 15

    使用xml.etree.ElementTree XML解析子元素

  16. 16

    使用ElementTree解析XML时使用名称空间

  17. 17

    解析elementTree以XML格式返回字符串-Python

  18. 18

    具有多个答案的Python ElementTree XML解析

  19. 19

    将XML解析为Pandas Dataframe,Python 3.8,ElementTree

  20. 20

    带有ElementTree Amazon API的python xml解析器

  21. 21

    python elementTree XML解析器的性能问题

  22. 22

    使用ElementTree和请求进行XML解析

  23. 23

    如何使用ElementTree正确解析utf-8 xml?

  24. 24

    无法使用xml.etree.ElementTree解析html

  25. 25

    如何使用ElementTree解析XML文件并检索子元素

  26. 26

    解析XML:使用ElementTree查找有趣的元素

  27. 27

    使用ElementTree将XML属性解析为变量

  28. 28

    使用xml.etree.ElementTree的Python xml解析不起作用

  29. 29

    Python xml.ElementTree - 在变量中返回解析后的 xml 以供稍后使用的函数

热门标签

归档