我正在尝试从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注释的
答案 0 :(得分:4)
如果您的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'))
)
答案 1 :(得分:0)
根据the docs,ElementTree忽略XML注释。您能否以不同的方式生成XML?