web-dev-qa-db-ja.com

解析する前にXMLの属性とタグの存在を確認するにはどうすればよいですか?

pythonでElement Treeを介してXMLファイルを解析し、コンテンツをcppファイルに書き込みます。

子タグのコンテンツは、タグごとに異なります。たとえば、最初のイベントタグには子としてパーティータグがありますが、2番目のイベントタグにはありません。

->解析前にタグが存在するかどうかを確認するにはどうすればよいですか?

->子供は、1番目のイベントタグにはvalue属性がありますが、2番目にはありません。値を取得する前に、属性が存在するかどうかを確認するにはどうすればよいですか。

->現在、私のコードは、存在しないパーティタグに対してエラーをスローし、2番目の子タグに「なし」属性値を設定します。

<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')

タグを確認してから、その値を取得します。

28
Abhishek

タグが存在しない場合、.find()は実際にNoneを返します。その値をテストするだけです:

_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を返します。

属性は_.attrib_辞書に保存されるため、標準のPythonテクニックを使用して属性を明示的にテストすることもできます。

_if 'value' in event.attrib:
    # value attribute is present.
_
57
Martijn Pieters