【问题标题】:How to iterate by more than first accepted element in ElementTree如何迭代 ElementTree 中超过第一个接受的元素
【发布时间】:2022-12-12 12:15:28
【问题描述】:

我应该使用什么来迭代多个元素?代码仅提取第一个满足的元素,在本例中为“PROCESSING_LEVEL”,然后可能结束其功能。当我交换这些元素时,情况相反。 我正在尝试制作一个应用程序来从 XML 中提取和解析元数据。

tree = ET.parse(filepath)
root: Element = tree.getroot()

for Processing_level in root.iter('PROCESSING_LEVEL' or 'processingLevel'):
    print(f'Processing level: {Processing_level.text}') #console
    text.insert('1.0', Processing_level.text + '\n') #gui
    text2.insert('1.0', Processing_level.text + '\n') #gui`

我尝试使用其他库,但我觉得 ET 是合适的库。我没有找到其他方法来明确从不同文件中的标签导入.xml 属性。 enter image description here

【问题讨论】:

  • 您的 XML 是否同时包含 PROCESSING_LEVELprocessingLevel 元素?在iter() 中包含or 看起来真的很奇怪。
  • 请分享您的输入 xml 和预期的输出
  • 不,也许我不够清楚。事情是从不同的文件中提取这些参数 'PROCESSING_LEVEL' 或 'processingLevel',具体取决于参数出现的位置(第一个出现在它被导入的文件中,如果不是循环搜索下一个)。我附上图片以使其清楚。
  • 在 Python 中,'PROCESSING_LEVEL' or 'processingLevel' 的计算结果为 'PROCESSING_LEVEL''processingLevel' or 'PROCESSING_LEVEL' 的计算结果为 'processingLevel'。使用库不会改变 Python 表达式的语义;在调用库函数之前评估参数。 ElementTree 中的.iter 节点方法的(可选)参数是一个命名(单个)标签的字符串。所以它正在按照它说的去做。

标签: python xml parsing extract elementtree


【解决方案1】:

root.iter() 函数迭代多个元素。如果您只需要特定的元素,您可以在 python 中将 if 条件添加到列表中。

b.xml :- 示例 xml 文件

<root>
  <PROCESSING_LEVEL>LH</PROCESSING_LEVEL>
  <test2>34</test2>
  <processingLevel>2A</processingLevel>
  <test>23</test>
</root>

main.py

from xml.etree import ElementTree as ET

tree = ET.parse("b.xml")
root: ET.Element = tree.getroot()


for Processing_level in root.iter():
  if(Processing_level.tag in ['PROCESSING_LEVEL','processingLevel']):
    print(f'Processing level: {Processing_level.text}') #console

output

Processing level: LH
Processing level: 2A

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2011-04-11
    相关资源
    最近更新 更多