python-3.x - 使用 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>
解决方案
.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
推荐阅读
- c# - 将 PrincipalSearchResult 对象传递给 ViewModel 中的列表
- c# - 统一的敌人波生成器
- python-3.x - Discord 机器人掷骰错误。为什么我的代码没有达到预期的结果?
- bash - Bash 脚本中的随机字符串
- spring-boot - 在 FUSE EAP 环境中使用 Springboot 自动配置连接到 SQL-Server 的问题
- python - Python while / if循环忽略条件
- python - 如何在 Python 中的日志文件中写入标题
- datatables - 数据表状态保存刷新在关闭对话框后继续 POST 请求
- reactjs - 收到来自 axios 请求的承诺时,状态未更新操作
- c# - 在 Visual Studio 中运行 Docker Compose 时引发异常