python - 如何在python中从xml文件中读取数据
问题描述
我有以下 xml 文件数据:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<rootnode>
<TExportCarcass>
<BodyNum>6168</BodyNum>
<BodyWeight>331.40</BodyWeight>
<UnitID>1</UnitID>
<Plant>239</Plant>
<pieces>
<TExportCarcassPiece index="0">
<Bruising>0</Bruising>
<RFIDPlant></RFIDPlant>
</TExportCarcassPiece>
<TExportCarcassPiece index="1">
<Bruising>0</Bruising>
<RFIDPlant></RFIDPlant>
</TExportCarcassPiece>
</pieces>
</TExportCarcass>
<TExportCarcass>
<BodyNum>6169</BodyNum>
<BodyWeight>334.40</BodyWeight>
<UnitID>1</UnitID>
<Plant>278</Plant>
<pieces>
<TExportCarcassPiece index="0">
<Bruising>0</Bruising>
<RFIDPlant></RFIDPlant>
</TExportCarcassPiece>
<TExportCarcassPiece index="1">
<Bruising>0</Bruising>
<RFIDPlant></RFIDPlant>
</TExportCarcassPiece>
</pieces>
</TExportCarcass>
</rootnode>
我正在使用 python 的lxml
模块从 xml 文件中读取数据,如下所示:
from lxml import etree
doc = etree.parse('file.xml')
memoryElem = doc.find('BodyNum')
print(memoryElem)
但它只是打印None
而不是6168
. 请建议我在这里做错了什么。
解决方案
当您find
在文本字符串上运行时,它只会搜索根级别的元素。您可以改为使用其中xpath
的查询find
来搜索文档中的任何元素:
- 仅获取第一个元素:
from lxml import etree
doc = etree.parse('file.xml')
memoryElem = doc.find('.//BodyNum')
memoryElem.text
# 6168
- 获取所有元素:
[ b.text for b in doc.iterfind('.//BodyNum') ]
# ['6168', '6169']
推荐阅读
- typescript - 使用 grpc-web 为 vue 配置 Envoy
- imagemagick - ImageMagick,在转换运算符链中设置相对大小
- c# - C# [Required()] 注解不应该抛出异常
- php - 更新会话数据不起作用 - CodeIgniter
- sql - 使用枢轴计算每年出生的男性和女性的数量
- r - 试图将两行合并(变异)成一列
- java - Java Kubernetes 客户端 SSLHandshakeException 扩展(5)不应出现在 certificate_request 中
- java - JPA 更新实体,包括实体列表
- floating-point - 哪些单精度浮点数需要 9 个有效十进制数字才能明确表示十进制?
- typescript - 如何在 WebStorm/IntelliJ 中使用 ts-node 导入项目库来运行 TypeScript 临时文件?