gpt4 book ai didi

python - 处理 xml 文档中缺失的元素

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:36 25 4
gpt4 key购买 nike

我有一些 XML,其中的一个片段如下所示:

<osgb:departedMember>
<osgb:DepartedFeature fid='osgb4000000024942964'>
<osgb:boundedBy>
<gml:Box srsName='osgb:BNG'>
<gml:coordinates>188992.575,55981.029 188992.575,55981.029</gml:coordinates>
</gml:Box>
</osgb:boundedBy>
<osgb:theme>Road Network</osgb:theme>
<osgb:reasonForDeparture>Deleted</osgb:reasonForDeparture>
<osgb:deletionDate>2014-02-19</osgb:deletionDate>
</osgb:DepartedFeature>
</osgb:departedMember>

我正在解析它:

departedmembers = doc_root.findall('{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}departedMember')
for departedMember in departedMembers:
findWhat='{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}DepartedFeature'
fid = int(departedmember.find(findWhat).attrib['fid'].replace('osgb', ''))
theme=departedmember[0].findall('{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}theme')[0].text
reason=departedmember[0].findall('{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}reasonForDeparture')[0].text
date=departedmember[0].findall('{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}deletionDate')[0].text

有时原因或日期或两者都是空的,即元素丢失,而不仅仅是内容为空。根据 XSD,这是合法的,但我在尝试选择不存在的元素的文本时遇到属性错误。为了解决这个问题,我将原因和日期行放在 try 中,除了 block ,例如:

try:
date=departedmember[0].findall('{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}deletionDate')[0].text
except:
pass

这行得通,但我讨厌像这样使用 except/pass,所以这让我想知道是否有更好的方法来解析这样的文档,其中某些元素是可选的。

最佳答案

由于您只对 findall 的第一个元素感兴趣,因此可以将 findall(x)[0] 替换为 find(x)。此外,如果你想避免 try/except block ,你可以使用三元。

departedmembers = doc_root.findall('{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}departedMember')
for departedMember in departedMembers:
...
date = departedmember[0].find('{http://www.ordnancesurvey.co.uk/xml/namespaces/osgb}deletionDate')
date = None if date == None else date.text # Considering you want to set the element to None if it was not found

关于python - 处理 xml 文档中缺失的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22716169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com