How can I check the existence of attributes and tags in XML before parsing?(如何在解析之前检查 XML 中是否存在属性和标签?)
问题描述
我正在通过 Python 中的元素树解析 XML 文件,并将内容写入 cpp 文件.
I'm parsing an XML file via Element Tree in python and and writing the content to a cpp file.
子标签的内容会因不同的标签而异.例如,第一个事件标签将派对标签作为子标签,但第二个事件标签没有.
The content of children tags will be variant for different tags. For example first event tag has party tag as child but second event tag doesn't have.
-->如何在解析前检查标签是否存在?
-->How can I check whether a tag exists or not before parsing?
-->Children 在第一个事件标签中具有 value 属性,但在第二个事件标签中没有.如何在取值之前检查属性是否存在.
-->Children has value attribute in 1st event tag but not in second. How can I check whether an attribute exists or not before taking it's value.
--> 目前我的代码对不存在的派对标签抛出错误,并为第二个子标签设置无"属性值.
--> Currently my code throws an error for non existing party tag and sets a "None" attribute value for the second children tag.
<main>
<event>
<party>Big</party>
<children type="me" value="3"/>
</event>
<event>
<children type="me"/>
</event>
</main>
代码:
import xml.etree.ElementTree as ET
tree = ET.parse('party.xml')
root = tree.getroot()
for event in root.findall('event'):
parties = event.find('party').text
children = event.get('value')
我想检查标签,然后取它们的值.
I want to check the tags and then take their values.
推荐答案
如果标签不存在,.find()
确实返回 None
.只需测试该值:
If a tag doesn't exist, .find()
indeed returns None
. Simply test for that value:
for event in root.findall('event'):
party = event.find('party')
if party is None:
continue
parties = party.text
children = event.get('value')
您已经在事件上使用 .get()
来测试 value
属性;如果属性不存在,它也会返回 None
.
You already use .get()
on event to test for the value
the attribute; it returns None
as well if the attribute does not exist.
属性存储在 .attrib
字典中,因此您也可以使用标准 Python 技术来显式测试属性:
Attributes are stored in the .attrib
dictionary, so you can use standard Python techniques to test for the attribute explicitly too:
if 'value' in event.attrib:
# value attribute is present.
这篇关于如何在解析之前检查 XML 中是否存在属性和标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在解析之前检查 XML 中是否存在属性和标签?
基础教程推荐
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 筛选NumPy数组 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01