web-dev-qa-db-ja.com

xml.etree.ElementTreeを使用して、ファイル内のXMLタグのリストを取得する

前述のように、ライブラリ_xml.etree.ElementTree_を使用して、ファイル内のXMLタグのリストを取得する必要があります。

ETVar.child, ETVar.getroot(), ETVar.tag, ETVar.attribのようなプロパティとメソッドがあることを知っています。

しかし、それらを使用して、少なくともレベル2のタグの名前を取得できるようにするには、ネストされたforを使用する必要がありました。

現時点で私は次のようなものを持っています

_for xmlChild in xmlRootTag:
    if xmlChild.tag:
        print(xmlChild.tag)
_

目標は深くネストされたXMLタグでさえもすべてのリストを取得するファイル内で重複を排除することです。

より良いアイデアとして、XMLコードの可能な例を追加します。

_<root>
 <firstLevel>
  <secondlevel level="2">
    <thirdlevel>
      <fourth>text</fourth>
      <fourth2>text</fourth>
    </thirdlevel>
  </secondlevel>
 </firstlevel>
</root>
_
8
FanaticD

私はこのテーマについてさらに調査を行い、適切な解決策を見つけました。これは一般的な作業である可能性があるため、回答します。したがって、他の人に役立つと思います。

私が探していたのは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)

重要な注意事項

  • xml.etree.ElemTreeは標準ですPythonライブラリ
  • サンプルはPython v3.2.3用に書かれています
  • 重複を削除するために使用されるメカニズムは、setへの変換に基づいています。これにより、一意の値のみが許可され、その後listに変換されます。
16
FanaticD

組み込みのPython set comprehension:

import xml.etree.ElementTree as ET

xmlTree = ET.parse('myXMLFile.xml')
tags = {elem.tag for elem in xmlTree.iter()}

特にリストが必要な場合は、リストにキャストできます。

import xml.etree.ElementTree as ET

xmlTree = ET.parse('myXMLFile.xml')
tags = list({elem.tag for elem in xmlTree.iter()})
4
Jonne Kleijer