python - 解析 xml 文件并返回特定变量的列表
问题描述
我正在尝试从 xml 文件中提取 X、Y、Z 的列表。xml的一部分是:
<Data>
<TargetPosition X="57.23471787820652" Y="-26.04271457691532"
Z="9.988092935592704" Valid="1"/> #PosLang
<StartPosition X="0" Y="0" Z="0" Valid="0"/>
</Data>
</Object>
<Object Type="{aa99a9ec-4b85-442e-b914-de3579656eb5}">
<ParentTObject Valid="1">
<Translation X="0" Y="0" Z="0"/>
<Rotation W="1" X="0" Y="0" Z="0"/>
</ParentTObject>
<Data>
<TargetPosition X="58.81901290773406" Y="-20.09883392050945"
Z="16.53197054898237" Valid="1"/> #NegLang
<StartPosition X="0" Y="0" Z="0" Valid="0"/>
</Data>
</Object>
我需要从具有#PosLang 注释的文件中的所有TargetPosition中提取 X、Y、Z
def targets(path='some.xml'):
try:
e = ET.parse(path).getroot()
except FileNotFoundError:
return list()
Position = namedtuple('float', ['x', 'y', 'z'])
for position in e.iter('TargetPosition'):
yield Position(
x=float(position.get('X')),
y=float(position.get('Y')),
z=float(position.get('Z'))
)
在 y 代码中,我提取所有 TargetPosition 的 X、Y、Z,但我只需要有 #PosLang 注释
解决方案
如果您的 XML确实包含与示例显示完全相同的字符串#PosLang
,那么这不是注释,而是常规文本节点。
由于该文本节点跟随<TargetPosition>
元素,它将位于.tail
属性中:
def targets(path='some.xml'):
try:
e = ET.parse(path).getroot()
except FileNotFoundError:
return list()
Position = namedtuple('float', ['x', 'y', 'z'])
for position in e.iter('TargetPosition'):
if "#PosLang" in position.tail:
yield Position(
x=float(position.get('X')),
y=float(position.get('Y')),
z=float(position.get('Z'))
)
推荐阅读
- flutter - Flutter ListView Builder 滚动整个屏幕
- javascript - 如何将 JavaScript 变量传递给 Django 视图
- sql-server - 当 Date 为 null 但不明白为什么以及如何修复它时,我收到一个错误
- python - 如何在 python 中将 "\xff\xfet\x00e\x00s\x00t\x00" 转换为 b'\xff\xfet\x00e\x00s\x00t\x00"'
- python - 在 Python 中合并两列
- javascript - 浏览器中的 Python 解释器。在 Skulpt 中使用外部模块
- html - 如何使用CSS访问具有相同类的父>子的第二个div
- r - 将多个图排列到一个网格中
- matlab - 是否可以在 Matlab 中为 fmincon 的内点法定义最大步长(欧几里得距离)?
- python - 整数列表中的对元组