首页 > 解决方案 > 使用 Python 在 XML 文件中搜索字段的值

问题描述

我正在尝试使用以下代码在 XML 文件中查找字段的值

from xml.etree import ElementTree as ET    

filename = ('TEST.xml')
root = ET.parse(filename)
root1 = root.getroot()
field = root1.findall('.//ALTERNATE_COMPANY_NAME').text

这将返回以下错误

field = root1.findall('.//ALTERNATE_COMPANY_NAME').text
AttributeError: 'list' object has no attribute 'text'

ALTERNATE_COMPANY_NAME 字段仅在 xml 文件中出现一次

<Descriptive>
    <ALTERNATE_COMPANY_NAME>TEST_TEST</ALTERNATE_COMPANY_NAME>
    <CNTRY>US</CNTRY>
    <COUNTRY_CODE>US</COUNTRY_CODE>
</Descriptive>

标签: python-3.xxmlparsing

解决方案


.findall返回一个列表,即使它只有一个项目,所以使用以下任何一种:

from xml.etree import ElementTree as ET

xml = '''<Descriptive>
    <ALTERNATE_COMPANY_NAME>TEST_TEST</ALTERNATE_COMPANY_NAME>
    <CNTRY>US</CNTRY>
    <COUNTRY_CODE>US</COUNTRY_CODE>
  </Descriptive>'''

root = ET.fromstring(xml)

# dereference list, fails if zero found, won't print more than one
field = root.findall('.//ALTERNATE_COMPANY_NAME')[0].text
print(field)

# iterate list, prints all found
for field in root.findall('.//ALTERNATE_COMPANY_NAME'):
    print(field.text)

# prints one, fails if not found
field = root.find('.//ALTERNATE_COMPANY_NAME').text
print(field)

输出:

TEST_TEST
TEST_TEST
TEST_TEST

推荐阅读