使用xml.etree.ElementTree获取文件中的XML标记列表

Fan*_*icD 8 python xml tags elementtree tagname

如上所述,我需要使用库获取文件中的XML标记列表xml.etree.ElementTree.

我知道有类似的属性和方法ETVar.child, ETVar.getroot(), ETVar.tag, ETVar.attrib.

但是为了能够使用它们并至少获得2级标签的名称,我不得不使用嵌套的.

目前我有类似的东西

    for xmlChild in xmlRootTag:
      if xmlChild.tag:
        print(xmlChild.tag)
Run Code Online (Sandbox Code Playgroud)

目标是在文件中获取所有,甚至深度嵌套的XML标记的列表,从而消除重复.

为了更好的想法,我添加了可能的XML代码示例:

<root>
 <firstLevel>
  <secondlevel level="2">
    <thirdlevel>
      <fourth>text</fourth>
      <fourth2>text</fourth>
    </thirdlevel>
  </secondlevel>
 </firstlevel>
</root>
Run Code Online (Sandbox Code Playgroud)

Fan*_*icD 16

我已经完成了关于这个主题的更多研究,并找到了合适的解决方案.由于这可能是一项常见任务,我会回答它,因此我相信它可以帮助其他人.

我正在寻找的是etree方法iter.

import xml.etree.ElementTree as ET
# load and parse the file
xmlTree = ET.parse('myXMLFile.xml')

elemList = []

for elem in xmlTree.iter():
  elemList.append(elem.tag) # indent this by tab, not two spaces as I did here

# now I remove duplicities - by convertion to set and back to list
elemList = list(set(elemList))

# Just printing out the result
print(elemList)
Run Code Online (Sandbox Code Playgroud)

重要笔记

  • xml.etree.ElemTree 是一个标准的Python库
  • 样本是为 Python v3.2.3
  • 用于删除重复的机制是基于转换为set,它只允许唯一值,然后转换回list.


Jon*_*jer 8

您可以使用内置的 Python 集合理解:

import xml.etree.ElementTree as ET

xmlTree = ET.parse('myXMLFile.xml')
tags = {elem.tag for elem in xmlTree.iter()}
Run Code Online (Sandbox Code Playgroud)

如果你特别需要一个列表,你可以将它转换为一个列表:

import xml.etree.ElementTree as ET

xmlTree = ET.parse('myXMLFile.xml')
tags = list({elem.tag for elem in xmlTree.iter()})
Run Code Online (Sandbox Code Playgroud)